我的游戏表中包含以下列:
-match_type
-team_one_id
-team_two_id
match_type 列的值可以是单曲或双打。我还有两个名为用户和对的表。
如果 match_type 的值为单曲,我希望 team_one_id 和 team_two_id 列与用户表。如果 match_type 的值加倍,我希望这两列与对表相关联。
我如何使用Eloquent执行此操作 - 两列的关系取决于类型的值?
答案 0 :(得分:0)
我必须覆盖Laravel的 Model 类中的SELECT group_concat(CONCAT('[Date.UTC(', DATE_FORMAT
(due_date,'%Y,%m,%d')), '), ',DATEDIFF(due_date, start_date), ']')
as diff from project_has_tasks WHERE project_id =$sum8
方法,以允许将自定义列名用于多态关系。默认情况下,Laravel使用 _type 和 _id 后缀来标识多态关系所需的列。这两列也必须具有相同的前缀(即 参考 _type 和 参考 强> _id )。
在我的用户和配对型号中,我有以下内容:
morphMany()
这允许我使用以下方式与 Games 表建立关系:
// Overwrite morphMany() so we can use custom columns
public function morphMany($related, $name, $type = null, $id = null, $localKey = null){
$instance = new $related;
$table = $instance->getTable();
$localKey = $localKey ? : $this->getKeyName();
return new MorphMany($instance->newQuery(), $this, $table . '.' . $type, $table . '.' . $id, $localKey);
}
然后,在游戏模型中,您将使用// Defines the relationship between this table and the games table through the team_one_id column
public function game_team_one(){
return $this->morphMany('App\Models\Game', null, 'match_type', 'team_one_id');
}
// Defines the relationship between this table and the games table through the team_two_id column
public function game_team_two(){
return $this->morphMany('App\Models\Game', null, 'match_type', 'team_two_id');
}
填充前三个可选参数(以覆盖默认列名称)以建立我们的多态关系:
morphTo()