[英]Laravel - how to use belongsToMany relationship using second index and not primary key
[英]laravel 5 belongsToMany using primary key as table
我有3个表,分别称为permissions
, processes
和permission_processes
。
表格的数据如下所示:
permissions
-----------
ID Name
-- ----
1 Blog
2 Users
...
processes
---------
ID Name
-- ----
1 Create
2 Update
3 View
4 Delete
permission_processes
--------------------
ID permission_id process_id
-- ------------- ----------
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
6 2 2
...
我正在尝试获取所有流程的特定权限。 但是,在模型中使用关系时,它将permissions
表的primary key
视为表。
这是错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table
'ahp.permission_id' doesn't exist (SQL: select `permission_processes`.*,
`permission_id`.`permission_id` as `pivot_permission_id`,
`permission_id`.`permission_process_id` as `pivot_permission_process_id`
from `permission_processes` inner join `permission_id` on
`permission_processes`.`permission_process_id` = permission_id`.`permission_process_id` where
`permission_id`.`permission_id` = 0O9aynuPJtBjdYW)
以下是每个模型:
允许:
class Permission extends Model
{
protected $table = 'permissions';
protected $primaryKey = 'permission_id';
protected $fillable = ['permission_id', 'permission_name', 'permission_description', 'permission_slug', 'state', 'active'];
public function permission_processes() {
return $this->belongsToMany('\App\PermissionProcess', 'permission_id', 'permission_id');
}
}
PermissionProcess:
class PermissionProcess extends Model
{
protected $table = 'permission_processes';
protected $primaryKey = 'permission_process_id';
protected $fillable = ['permission_process_id', 'permission_id', 'process_id', 'state', 'active'];
public function process() {
return $this->hasOne('\App\Process', 'process_id', 'process_id');
}
public function permission() {
return $this->hasOne('\App\Permission', 'permission_id', 'permission_id');
}
}
处理:
class Process extends Model
{
protected $table = 'processes';
protected $primaryKey = 'process_id';
protected $fillable = ['process_id', 'process_name', 'process_description', 'state', 'active'];
public function permission_processes() {
return $this->belongsToMany('\App\PermissionProcess', 'process_id', 'process_id');
}
}
这是我用来调用permission processes
的代码:
$all_permissions = \App\Permission::orderBy('active', 1)->get();
dd($all_permissions->first()->permission_processes);
我究竟做错了什么? 我所有其他使用相同流程的关系是否有效?
Laravel自动查找链接表。
您需要告诉它链接的另一端是什么,以便它可以猜测链接表中的列名。
class Permission extends Model {
public function processes() {
return $this->belongsToMany('\App\Permission', 'your_link_table_name', 'key_1','key_2');
}
}
如果以后需要中间表,则可以使用$ permission-> processess-> pivot
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.