Laravel Eloquent - 两个ID列的多态关系

时间:2018-02-03 02:13:19

标签: laravel laravel-5 eloquent laravel-5.2 laravel-eloquent

我的游戏表中包含以下列:

-match_type
-team_one_id
-team_two_id

match_type 列的值可以是单曲双打。我还有两个名为用户的表。

如果 match_type 的值为单曲,我希望 team_one_id team_two_id 列与用户表。如果 match_type 的值加倍,我希望这两列与表相关联。

我如何使用Eloquent执行此操作 - 两列的关系取决于类型的值?

1 个答案:

答案 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()