【问题标题】:Select specific fields in Eloquent eager loading not working在 Eloquent 急切加载中选择特定字段不起作用
【发布时间】:2018-11-10 09:27:14
【问题描述】:

我有一个属于UserNotifications 模型。我想在选择通知集合时加载用户,并且只加载带有namesemails 的模型。但是,当使用 select 方法时,查询返回 null。

$notifications->load(['user' => function($query){
    $query->select(["name","email"]);
}]);

如果select() 方法的参数如下所示,则给出所有字段:

$notifications->load(['user' => function($query){
    $query->select(["*"]    
}]);

【问题讨论】:

标签: sql laravel eloquent eager-loading


【解决方案1】:

也许选择这样的字段可以解决问题:

$notifications->load('user:id,name,email');

您正在尝试的是添加约束,而不是选择某些字段

【讨论】:

  • 当您需要为查询添加一些约束时,它不适用于闭包。
【解决方案2】:

只需要添加主键列就可以了。

$notifications->load(['user' => function($query){
    $query->select(["ID","name","email"]);
}]);

这样任何约束都可以添加到查询中。

【讨论】:

  • 如果反之,则需要包含外键:$user->load(['notifications' => function($q){ $q->select(['user_id', 'message']); }]);,因为 'id' 不起作用。
【解决方案3】:

如果您使用 select 输入数据,则必须传递 foreign_key。 看看

public function index()
{ 
    $employee = Employee::with(['pay_salary' => function($query){
       $query->select(['employee_id','salary_amount'])
             ->whereMonth('paying_date',\Carbon\Carbon::now()->month);
    },'getSalary:id,employeeID,salary'])->get();
    
    return View::make('admin.salary.index',['data' => $employee]);
}

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2019-06-29
    • 2011-05-16
    相关资源
    最近更新 更多