我与表用户、项目和数据透视表 user_item 之间存在多对多关系,我需要调用查询: Select * from user_item where user_id=$user->id in laravel 并以 json 格式返回结果。我试试
$user=User::find(session('user_id'))->items()->get();
return response ()->json($user);
但它不起作用。我该怎么做?
class User extends Authenticatable {
public function items (){
return $this->belongsToMany ("App\Models\Item", "user_item", "user", "item");
}
}
class Item extends Models {
public function users (){
return $this->belongsToMany ("App\Models\User", "user_item", "item", "user");
}
}
答案 0 :(得分:0)
您可以使用 withpivot
方法在数据透视表中定义列
public function items (){
return $this->belongsToMany ("App\Models\Item", "user_item",
"user", "item")->withPivot(['column1', 'column2','another_column']);
}
要获得关系而不是使用 get()
,您应该使用如下:
$user=User::find(session('user_id'))->items;
return response ()->json($user);
上面会给出下面的json结果:
[{
"id": 4,
"name": "PC",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
},
{
"id": 5,
"name": "Phone",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
}]
您还可以使用 with() 在使用用户模型中包含数据透视:
$user=User::with('items')->find(session('user_id'));
return response ()->json($user);
给 json 结果类似于:
{
"id": 1,
"name": "User Name",
"email": "email@user.com",
"created_at": null,
"updated_at": null,
"items": [{
"id": 4,
"name": "PC",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
},
{
"id": 5,
"name": "Phone",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
}]
}]