利用 Laravel 的 Eloquent ORM 中的“with()”函数从多个表中获取相关数据时,您可能会遇到只需要第二个表中的特定列的情况。本文深入探讨了如何在不借助查询生成器的情况下实现此目的。
考虑这样的场景:您有两个表“User”和“Post”,它们之间具有一对多关系。在您的 User 模型中,您定义与 Post 模型的“hasMany”关系:
public function post() { return $this->hasmany('post'); }
同样,在 Post 模型中,您与 User 模型建立“belongsTo”关系:
public function user() { return $this->belongsTo('user'); }
但是,当您使用“with()”函数连接这两个表时,您可能会注意到它默认选择第二个表中的所有列。假设您只想从“User”表中检索特定列,例如“id”和“username”。以下代码片段还不够:
Post::query() ->with('user') ->get();
要实现您的目标,您可以传递一个闭包函数作为传递给“with()”函数的数组的第二个索引:
Post::query() ->with(['user' => function ($query) { $query->select('id', 'username'); }]) ->get()
此闭包允许您指定从第二个表中检索哪些列。在这种情况下,它只会从“User”表中选择“id”和“username”列。
注意:正如答案中提到的,主键(“id” " 在这种情况下)必须是 $query->select() 方法中的第一个参数,以确保正确的结果检索。
以上是如何在 Laravel 雄辩的 `with()` 函数中选择特定列?的详细内容。更多信息请关注PHP中文网其他相关文章!