3

Laravel 4 で熱心な読み込みを使用する場合、次を使用して関係を読み込むことができます。

$user = User::with('role')->find(1);

これはユーザーの表現を返し、次の方法でロールの表現にアクセスできます

$user->roles();

where を使用して熱心な読み込みをフィルタリングすることもできます

$user = User::with(array('role' => function($query) {
    $query->where('name', 'like', '%key%');
}))->find(1);

ロール名フィールドに が含まれている場合にのみロールが入力されたユーザー表現を返しますkey

制約を追加することで、ユーザーの表現で返されるフィールドを制限できselect()ます。

$user = User::with(array('role' => function($query) {
    $query->where('name', 'like', '%key%');
}))->select('email')->find(1);

これは、ユーザー表現のフィールドとロール表現のすべてのフィールドemailのみを返します。id

リレーションシップで返されるフィールドを(APIで使用するために)制限できることを望んでいましたが、方法が見つからないようです。以下の2つの方法を試しました。

$user = User::with(array('role' => function($query) {
    $query->select('name');
}))->find(1);

$user = User::with('role')->select('role.name')->find(1);
4

2 に答える 2

1

返される列はフィルタリングされませんが、かなり大きな列 (ブログ投稿のコンテンツなど) を取得したくない場合は実行可能な解決策ではありませんが、配列として表されたときに表示される列をフィルタリングするために使用できます。またはJson。

//fetch the unfiltered relationship
$user = User::with('roles')->find($id);

//loop over each model in that relationship and set the visible properties
$user->roles->each(function($role){
    $role->setVisible(['id', 'name', 'pivot']);
});
于 2013-09-11T23:28:51.153 に答える