![](/img/trans.png)
[英]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.