Php 定义自定义中间表模型的Laravel
我正试图通过使用Eloquent获得用户权限 我有三张桌子 第一个是用户表 第二个是权限表 第三个是用户权限 结构非常简单Php 定义自定义中间表模型的Laravel,php,laravel,laravel-5,eloquent,laravel-eloquent,Php,Laravel,Laravel 5,Eloquent,Laravel Eloquent,我正试图通过使用Eloquent获得用户权限 我有三张桌子 第一个是用户表 第二个是权限表 第三个是用户权限 结构非常简单 users -id -name permissions -id -name user_permissions -user_id -permission_id -read -write -update -delete 这是显示用户权限的代码: $user = App\User::find(1)->first(); foreach($user->permiss
users
-id
-name
permissions
-id
-name
user_permissions
-user_id
-permission_id
-read
-write
-update
-delete
这是显示用户权限的代码:
$user = App\User::find(1)->first();
foreach($user->permissions as $permission){
echo "Read".$permission->pivot->read."<br>";
echo "Write".$permission->pivot->write."<br>";
echo "Update".$permission->pivot->update."<br>";
echo "Delete".$permission->pivot->delete."<br>";
}
但我想用另一种方式写,因为我不想选择我需要的字段,我只想选择所有字段,所以当我这样写时,我会得到一个错误:
public function permissions()
{
return $this->belongsToMany('App\Permission','user_permissions')->using('App\UserPermission');
}
这是我的错误:
Builder.php第2440行中的BadMethodCallException:
调用未定义的方法Illumb\Database\Query\Builder::using()
我不想选择我需要的字段,我只想选择所有字段
如果您的意思是不想指定透视中存在哪些字段,而是让它自动发生,那么您不能。发件人:
默认情况下,轴对象上将仅显示模型关键点。如果透视表包含额外属性,则必须在定义关系时指定这些属性:
.而不仅仅是:
return$this->belongstomy('App\Permission','user\u permissions')->withPivot('read','create','update','delete');
您可以在透视模型中定义常量/变量:
class用户权限扩展了Pivot
{
常量透视属性=[
“读”,
“创建”,
“更新”,
“删除”
];
// . . .
}
然后:
公共功能权限()
{
返回$this->belongToMany(权限::类,“用户权限”)
->withPivot(用户权限::PIVOT\u属性)
->使用(UserPermission::class);
}
现在,您可以在您的
UserPermission
类中更新PIVOT\u属性
常量。这就是我在这里尝试的操作:返回$this->belongTomany('App\Permission','user\u permissions')->使用('App\UserPermission');但它不起作用我不熟悉使用方法的,在文档中找不到关于它的任何信息。。。记录在哪里?谢谢,我不知道,在5.4中似乎是新的?那么您的UserPermission
模型是什么样子的呢?using(…)
仅在laravel 5.4中可用,laravel 5.3将给您调用未定义的方法illumb\Database\Query\Builder::using()
您有什么laravel版本?
public function permissions()
{
return $this->belongsToMany('App\Permission','user_permissions')->using('App\UserPermission');
}