渴望在laravel 5中加载两个具有多个关系的表

时间:2015-12-22 06:15:44

标签: php laravel laravel-5 eloquent laravel-5.1

我有3种型号Tracktype,Tracks和Subgenres。这种关系是这样的。 Tracktype有很多曲目,曲目可以有很多子类。但轨道只能有一种轨道类型

我已经定义了像这样的关系

/**
 * Gets the tracks lists Associated with a track type
 *
 * @return \Illuminate\Database\Eloquent\Relations\hasMany
 */
public function tracks()
{
    return $this->hasMany('App\Tracks', 'id', 'id');
}


/**
 * Get the Lists of tracks Associated with the Subgenre ID
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function tracks()
{
    return $this->belongsToMany('App\Tracks', 'subgenre_track', 'subgenre_id', 'track_id');
}

我尝试过这样的事情。

App\TrackType::with(['tracks.subgeneres' => function ($query) {
    $query->where('name', 'Trans');
}])->where('name', 'Single')->get();

但它没有返回正确的结果

Array
(
    [0] => Array
        (
            [query] => select * from `tracktype` where `name` = ?
            [bindings] => Array
                (
                    [0] => Single
                )

        [time] => 0.55
    )

[1] => Array
    (
        [query] => select * from `tracks` where `tracks`.`id` in (?)
        [bindings] => Array
            (
                [0] => 1
            )

        [time] => 0.45
    )
)

我的需求是获得匹配Trans的Tracktype of Single和Subgeneres的所有曲目。我有Tracktype表和Subgeneres表以及相关的数据透视表。

如何定义这些关系?

1 个答案:

答案 0 :(得分:0)

通过将Tracktype中的方法从hasMany更改为belongsToMany来解决此问题。就是这样。使用相同的查询:)