【问题标题】:laravel select specific columns but with relationshipslaravel 选择特定列但有关系
【发布时间】:2017-03-15 08:07:47
【问题描述】:

我目前正在优化我的应用程序,其中一件事是只从数据库中选择真正需要的东西。

例如,当我检索用户对象时,我通常会这样做:

$user = User::where($attribute, '=', $value)->first();

此代码将返回一个包含所有列的完整用户对象。我的用户表很大,所以我认为只选择我需要的列是个好主意:

$user = User::where($attribute, '=', $value)->first($columns);

这也按预期工作。但我的问题是,一旦我指定了列,$user 变量的关系就不再起作用了,因为它不再是一个对象。

我的问题:是否可以只选择几列但仍然可以使用类似的关系

$user->parents

谢谢!

【问题讨论】:

    标签: database laravel eloquent query-builder relation


    【解决方案1】:

    试试这个

     $user = User::where($attribute, '=', $value)->select($columns)->first();
    

    【讨论】:

      【解决方案2】:

      只需为您想要获得的关系添加所有外键。例如,如果你想使用parent()关系,只需将key添加到$columns即可:

      array_push($columns, 'parent_id');
      

      之后,您将能够使用parent() 关系。

      【讨论】:

        【解决方案3】:

        是的,可以加载与选定列的关系,但为此您必须选择该关系表的foreign keys

        所以在这里你还必须选择user 表的列,它是parents 表中的外键,并使用with() 提及关系,

        例如,如果您在parents 表中有user_id 列作为外键,那么当您在first() 方法中提及列数组时,您必须选择用户的id 列,如下所示:

        $user = User::with('parents')->where($attribute, $value)->first(['id','email','image']); // also select 'id' for foreign key to load relationship
        

        使用上面的代码后,你可以得到父母的关系:$user->parents,别忘了把关系放在你的User模型中。

        如果您在用户表上有外键 parent_id 属于 parents 表,那么您必须选择 parent_id 列,如下代码:

        $user = User::with('parents')->where($attribute, $value)->first(['parent_id','email','image']);
        

        【讨论】:

          猜你喜欢
          • 2019-09-28
          • 2017-02-22
          • 2014-08-21
          • 1970-01-01
          • 1970-01-01
          • 2019-06-15
          • 1970-01-01
          • 1970-01-01
          • 2021-10-06
          相关资源
          最近更新 更多