从 Laravel 的数据透视表中选择 *

时间:2021-06-02 23:24:47

标签: php sql laravel

我与表用户、项目和数据透视表 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");
    }
}

1 个答案:

答案 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"
        }
    }]
}]
相关问题