当前位置: 首页 > 知识库问答 >
问题:

从两个不同的表中检索值,并将它们放在具有Laravel-foreach的视图中

汝承载
2023-03-14

我使用的框架Laravel。

我有两个表(用户和人员)。我想显示表中创建的人名、姓氏、用户名、电子邮件和用户名。

表用户

CREATE TABLE IF NOT EXISTS `festival_aid`.`users` (
  `user_id` BIGINT NOT NULL AUTO_INCREMENT,
  `user_username` VARCHAR(45) NOT NULL,
  `user_email` VARCHAR(45) NOT NULL,
  `user_password` CHAR(32) NOT NULL,
  `user_salt` CHAR(32) NOT NULL,
  `user_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user_modified` TIMESTAMP NULL,
  `user_deleted` TIMESTAMP NULL,
  `user_lastlogin` TIMESTAMP NULL,
  `user_locked` TIMESTAMP NULL,
  `user_token` VARCHAR(128) NULL,
  `user_confirmed` TIMESTAMP NULL,
  PRIMARY KEY (`user_id`, `person_id`),
  UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC),
  INDEX `fk_users_persons1_idx` (`person_id` ASC),
  CONSTRAINT `fk_users_persons1`
    FOREIGN KEY (`person_id`)
    REFERENCES `festival_aid`.`persons` (`person_id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

餐桌上的人

CREATE TABLE IF NOT EXISTS `festival_aid`.`persons` (
  `person_id` BIGINT NOT NULL AUTO_INCREMENT,
  `person_firstname` VARCHAR(45) NULL,
  `person_surname` VARCHAR(45) NULL,
  `person_created` TIMESTAMP NOT NULL,
  `person_modified` TIMESTAMP NULL,
  `person_deleted` TIMESTAMP NULL,
  PRIMARY KEY (`person_id`))
ENGINE = InnoDB;

索引操作

public function index()
    {
        $person = Person::all();
        $user = User::all();
        //$user = User::where($person_id == $user_id);

        return View::make('users.index')
            ->with('user', $user)
            ->with('person', $person);

        return View::make('users.index');
    }

用户迁移

Schema::table('users', function(Blueprint $table)
        {
        $table->increments('user_id');
            $table->string('user_email');
            $table->timestamp('user_created');
            $table->timestamp('user_modified');
            $table->timestamp('user_deleted');
            $table->timestamp('user_lastlogin');
            $table->timestamp('user_locked');

            $table->foreign('person_id')
                ->references('id')->on('persons')
                ->onDelete('cascade');
        });

人员迁移

public function up()
    {
        Schema::table('persons', function(Blueprint $table)
        {
            $table->increments('person_id');

            $table->string('person_firstname');
            $table->string('person_surname');
        });
    }

模型用户

class User extends Eloquent  {

    protected $primaryKey = 'user_id';

    public function persons()
    {
        return $this->hasOne('Person', 'foreign_key');
    }
}

模范人物

class Person extends Eloquent {

    protected $table = 'persons';

    protected $primaryKey = 'person_id';

    public function users()
    {
        return $this->belongsTo('User', 'local_key');
    }

    public $timestamps = false;
}

用户视图

@foreach($user as $user=> $value)
   <tr>
      <td>{{ $value->user_id }}</td>
      <td>{{ $value->person_firstname }}</td>
      <td>{{ $value->person_surname }}</td>
      <td>{{ $value->user_username }}</td>
      <td>{{ $value->user_email }}</td>
      <td>{{ $value->user_created }}</td>
   </tr>
@endforeach

给我user_iduser_usernameuser_emailuser_created

@foreach($person as $person=> $value)
    <tr>
       <td>{{ $value->user_id }}</td>
       <td>{{ $value->person_firstname }}</td>
       <td>{{ $value->person_surname }}</td>
       <td>{{ $value->user_username }}</td>
       <td>{{ $value->user_email }}</td>
       <td>{{ $value->user_created }}</td>
    </tr>
 @endforeach

给我用户名和姓氏。

我想将这两者与PHP结合起来。

我在foreach中尝试了foreach,但对于每个用户的用户名、用户的电子邮件、用户的创建,它都会提供表中所有的人名、人名。

有人知道如何使用laravel框架来做这件事吗?

共有3个答案

申屠泉
2023-03-14

您应该使用一个查询同时从两个表中检索数据,如下所示:

SELECT
  p.person_firstname,
  p.person_surname,
  u.user_username,
  u.user_email,
  u.user_created
FROM
  users AS u,
  persons AS p
WHERE
  u.person_id = p.person_id;

这将为您提供比在for循环中使用单独查询更好的性能,而且也更容易。

此外,我不明白为什么要在表的每一列前面加上实际上是表名的前缀。

编辑:使用Laravel,您可以表示查询如下,根据Laravel留档:

DB::table('users')
            ->join('persons', 'users.person_id', '=', 'persons.person_id')
            ->select(
                'persons.person_firstname',
                'persons.person_surname',
                'users.user_username',
                'users.user_email',
                'users.user_created'
            );
司空俊雄
2023-03-14
SELECT
    p.person_firstname, p.person_surname, u.user_username, u.user_email, u.user_created
FROM
    persons p, users u
WHERE
    p.person_id = u.person_id

这将仅获取您在单个查询中提到的信息。

韩嘉胜
2023-03-14

看起来你在使用雄辩的ORM。您可能想看看它关于定义关系和查询关系的文档。

首先,您必须稍微调整您的模型类,以正确定义这种一对一的关系,因为您以另一种方式定义了关系,并且未能指定正确的键列。您的模型类应该是这样的:

型号类别用户

class User extends Eloquent  {
    protected $primaryKey = 'user_id';

    public function person() {
        return $this->belongsTo('Person', 'person_id', 'person_id');
    }
}

模型类Person

class Person extends Eloquent {
    protected $table = 'persons';
    protected $primaryKey = 'person_id';
    public $timestamps = false;

    public function user() {
        return $this->hasOne('User', 'person_id', 'person_id');
    }
}

然后你应该可以像这样从Person访问属性:

$user = User::find(1);
$user->person()->person_firstname;
 类似资料:
  • 我在从两个表中检索数据然后列出它们时遇到了一些问题。我想将用户的提要帖子和他们喜欢的活动全部列在一个列表中。 提要-用户帖子表 我想做的是:在活动墙中列出提要和类似用户的活动。 所以它应该输出如下(按时间戳desc排序): “这是用户A的帖子” 我的当前SQL: 然而,我的问题是我不知道如何链接这两个表,因为我的“feed”中的ID与“likes”中的ID不同

  • 问题内容: 我正在使用基于SDK演示示例中EfficientAdapter示例的BaseAdapter扩展版本。 我的数据基本上是一个对象(),其中包含一个,其中包含实际的地点列表,可通过访问。此ArrayList数据按范围排序,由一些特殊项目(分隔符)组成,没有数据,但标志设置为。 现在,每当我得到一个作为分隔符的数据对象时,它都会返回并根据当前数据对象是由真实数据组成还是仅仅是分隔符虚拟物来使

  • 我有一个代码,其中我必须从我的桌面拖动两个图像,并把它放在两个可拖动按钮的框架。按钮已经做在框架上了。但是在拖动图像时,只能拖动到一个按钮上。图像不会被拖到另一个。我创建了一个< code>DragListener类,其中拖动方法占主导地位,还创建了一个主类< code > draginiallistener ,其中我传递了类< code>DragButton的对象,这样就创建了两个可拖动的按钮。

  • 我已经为用户、移位、模式创建了三向透视表。它称为pattern_shift_user。 [pattern_shift_user。][1] 它通过多对多的关系来引用这三个模型这里是用户模型的视图,它链接了模式模型和shift模型[user model][2] 我对每个模型都做了同样的操作, 我现在遇到的问题是将信息放入Laravel的表中。我想要3列标题日期/天,班次,站。 我可以得到我想要显示的所

  • 问题内容: 我有一个HTML表单,该表单已发布到Flask路线中。但是,是空的。如果我尝试通过id访问值之一,则会收到400错误。如何发布HTML表单中的值并在Flask中访问它们? 问题答案: 您没有属性。这就是客户端将传递给服务器的内容。如果您访问未提交的表单密钥,则Flask会引发400错误。

  • 问题内容: 我有2个表:product和cart,我希望结合这2个表并根据特定条件以数组形式显示数据,如下所示: 应显示特定类别下的所有产品,如果特定用户购买了给定产品中的任何产品,则其详细信息也应显示在该产品的前面 我到目前为止所做的代码是 它给出了这样的数组 但是我想要代替上面的数组的最后一个数组是 产品表视图(如您所见,产品表中包含一个productid,在每个productid下最多可以有