这是以下帖子: Laravel 4 and Eloquent: retrieving all records and all related records
给出的解决方案很有用:
$artists = Artist::with('instruments')->get();
return \View::make('artists')->withArtists($artists);
它也适用于:
$artists = Artist::get();
现在我正在尝试为两个表指定要返回的确切列。我已尝试在上面的语句和我的类中使用select()
,如下所示:
ArtistController.php
$artists = Artist::select('firstname', 'lastname', 'instruments.name')->get();
或:
$artists = Artist::with(array('instruments' => function($query) {
$query->select('name');
}))->get();
(如建议的here虽然这不会引发错误,但它也不会将列限制为仅指定的列)
或 Artist.php :
return $this->belongsToMany('App\Models\Instrument')->select(['name']);
我如何从firstname
表和lastname
列中artists
和name
列 表?
答案 0 :(得分:3)
不确定我在想什么。我觉得这么长时间的工作让我眼花缭乱。
无论如何,我更多地研究了这个并搜索了答案,最后在GitHub上发布了一个问题。
从Laravel v4.1开始,底线是不。
https://github.com/laravel/laravel/issues/2679
<击> 这解决了它:
<强> Artists.php 强>
public function instruments() {
return $this->hasMany('App\Models\Instrument', 'id');
}
请注意,我将其更改为hasMany
belongsToMany
,这对我来说更有意义,因为音乐家(或Artist
)会有很多Instrument
个玩家并且Instrument
可能属于许多Artist
(我在上面提到的上述问题中也提到过)。我还必须在我的模型中指定'id'
列,告诉ORM instrument.id
匹配artist_instrument.id
。这部分让我感到困惑,因为我认为hasMany
的顺序是foreign_key
,primary_key
,但也许我正在考虑它倒退。如果有人可以解释一下,我会很感激。
无论如何,解决方案的第二部分......
在 ArtistsController.php 中,我这样做了:
$artists = Artist::with(array(
'instruments' => function($q) {
$q->select('instruments.id', 'name');
})
)->get(array('id', 'firstname', 'lastname'));
这给了我我想要的东西,这是一个艺术家集合,只包含firstname
表格中的lastname
和artists
列以及{他们从name
播放的每个乐器的{1}}列。
击>
答案 1 :(得分:2)
$artists = Artist::with(array('instruments' => function ($query) {
$query->select('id', 'name');
}))->get('id', 'firstname', 'lastname');