Laravel多对多从两个表中获取字段

时间:2015-10-13 08:04:04

标签: laravel laravel-4 laravel-5 many-to-many relationship

我有3张桌子:

  1. 流派模型:id,name,slug等
  2. GenreStation型号:id,genre_id,station_id。
  3. 车站型号:id,名称,slug,logo等
  4. 我正试图通过带有偏移和限制参数的站表来获取类型slug的数据。但我也希望使用此查询获取流派名称:

    Genre::slug($genreSlug)
            ->first()
            ->stations()
            ->skip($offset)
            ->take($limit)
            ->get([
                'genres.name as genre_name',
                'stations.id',
                'stations.name',
                'stations.slug',
                'stations.stream_url',
                'stations.logo',
                'stations.media_type',
                'stations.bit_rate',
                'stations.listeners',
                'stations.status',
            ]);
    

    我收到以下错误:

      

    “Illuminate \ Database \ QueryException”,“message”:“SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'genres.name'(SQL:select genres。{{ 1}}为namegenre_namestationsidstationsnamestations,{{1} }。slugstationsstream_urlstationslogostationsmedia_typestationsbit_ratestationslistenersstationsstatusgenre_stationgenre_idpivot_genre_id为{{ 1}},genre_stationstation_idpivot_station_idgenre_stationcreated_atpivot_created_at来自genre_station内部联接{{1在updated_atpivot_updated_at = stationsgenre_station其中stationsid = 1限制15偏移0)“,”文件“ : “/家/流浪/项目/ MuzzaLife /供应商/ laravel /框架/ SRC /照亮/数据库/ Connection.php”, “行”:625

    没有genre_station字段,一切正常。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

在SQL查询中,您已经可以看到出现了什么问题。可能第一个查询将为您提供类型,但之后会为站点进行新查询,它们基于genre_station表。您没有genres表中的任何信息,因此您应该添加此信息。

您可以通过向查询添加联接来完成此操作。 http://laravel.com/docs/5.1/queries#joins

或者首先将该类型保存在一个单独的变量中并在...之后获取这些站点。

$genre = Genre::slug($genreSlug)->first();
$stations = $genre->stations()
    ->skip($offset)
    ->take($limit)
    ->get([
        'stations.id',
        'stations.name',
        'stations.slug',
        'stations.stream_url',
        'stations.logo',
        'stations.media_type',
        'stations.bit_rate',
        'stations.listeners',
        'stations.status',
    ]);