【发布时间】:2021-07-11 19:12:44
【问题描述】:
当产品名称等于“糟糕”时,我试图实现拉取用户信息和产品详细信息(指定昵称和名称),但我不知道为什么 getProducts 不返回任何东西。
用户模型
public function getProducts(){
return $this->hasMany('App\Models\Product','users_id');
}
产品型号
public function users(){
return $this->belongsTo(User::class);
}
拉取数据的代码:
$products = User::with(['getProducts' => function($query){
$query->select("users_id","name","nickname");
}])->get();
当前输出:
"data": [
{
"id": 1,
"name": "John Smith",
"email": "john.smith@hotmail.com",
"email_verified_at": null,
"created_at": "2021-04-08T13:29:13.000000Z",
"updated_at": "2021-04-08T13:29:13.000000Z",
"role": 0,
"get_products": [
]
},
{
"id": 2,
"name": "Kelvin Ooi",
"email": "kelvin.ooi@hotmail.com",
"email_verified_at": null,
"created_at": "2021-04-08T13:29:13.000000Z",
"updated_at": "2021-04-13T12:07:11.000000Z",
"role": 1,
"get_products": [
{
"nickname":"MCD",
"name":"Oops"
},
{
"nickname":"Mary Brown",
"name":"Oops"
},
{
"nickname":"Kentucy",
"name":"KFC"
},
{
"nickname":"Texas Chicken",
"name":"TXS"
}
]
}
]
预期输出
"data": [
{
"id": 1,
"name": "John Smith",
"email": "john.smith@hotmail.com",
"email_verified_at": null,
"created_at": "2021-04-08T13:29:13.000000Z",
"updated_at": "2021-04-08T13:29:13.000000Z",
"role": 0,
"get_products": [
]
},
{
"id": 2,
"name": "Kelvin Ooi",
"email": "kelvin.ooi@hotmail.com",
"email_verified_at": null,
"created_at": "2021-04-08T13:29:13.000000Z",
"updated_at": "2021-04-13T12:07:11.000000Z",
"role": 1,
"get_products": [
{
"nickname":"MCD",
"name":"Oops"
},
{
"nickname":"Mary Brown",
"name":"Oops"
}
]
}
]
【问题讨论】:
-
我认为你需要包含
user_id(外键),所以$query->select('user_id', 'name', 'nickname');,否则它不知道如何加载它们。 -
我已经检查了我的数据库已经有外键关系但它仍然无法正常工作..
-
如果我想拉取产品名称为“糟糕”的用户怎么办 $products = User::with(['getProducts' => function($query){ $query- >select("users_id","name","nickname"); }])->where("products.name","Oops")->get();
-
但它不起作用..
-
所以我刚刚用我的本地模型/关系测试了你的代码,它可以工作:
Model::with(['relationship' => function($q){ $q->select('id', 'relation_id', 'column'); }])->find(1);这将返回 ID 为 1 的模型,以及与这 3 列的关系记录。您的代码应该可以正常工作...
标签: php mysql laravel eloquent eloquent-relationship