繁体   English   中英

laravel 5 includesToMany使用主键作为表

[英]laravel 5 belongsToMany using primary key as table

我有3个表,分别称为permissionsprocessespermission_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM