【发布时间】:2015-10-16 11:14:14
【问题描述】:
是否允许有两个表,每个表都有一个 belongsToMany() 关系,使用同一个数据透视表?
这是我的用户表:
这是我的组织表:
这是数据透视表:
这是 Eloquent User.php 模型:
<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model {
protected $table = 'users';
public $timestamps = true;
use Authenticatable;
use SoftDeletes;
protected $dates = ['deleted_at'];
public function orgs()
{
return $this->belongsToMany('App\Org', 'org_user', 'org_id', 'user_id')->withPivot('role_id');
}
}
这里是 Eloquent Org.php 模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Org extends Model {
protected $table = 'orgs';
public $timestamps = true;
use SoftDeletes;
protected $dates = ['deleted_at'];
public function users()
{
return $this->belongsToMany('App\User', 'org_user', 'org_id, user_id')->withPivot('role_id');
}
}
这样做可以吗? (即使用共享数据透视表)有经验的人是否预见到这里有任何问题?或者也许有人可以评论标准做法/分享一些见解?
【问题讨论】:
-
然而,这看起来像是一个编程问题。首先,您能否在 MySQL 上启用通用日志,以便我们可以看到发送到服务器的实际查询,而不是 PHP 代码?其次,您能否将您的表格结构重新发布为(格式化)文本而不是图形(无法将图形剪切并粘贴到 mysql 客户端)。
-
嗨 Vérace,所以我有一个 User->belongsToMany()->Org 关系和一个 Org->belongsToMany()->User 关系。我对两种关系都使用相同的数据透视表(如上)。我将 org_id/user_id 对设置为唯一。你能评论一下共享的枢轴吗?
-
很难想象。您能否为所有表运行 SHOW CREATE TABLE My_Table\G 并将结果文本(格式化为代码)与您的问题一起发布。然后在此处使用@Vérace 发表评论。
-
投票将其转让给 SO。我怀疑这个站点中是否有人对 php/eloquent 有经验。
标签: mysql database-design php eloquent