2

私は Laravel 4 を使用しています。問題のモデルは拡張されEloquentます。

2 つのモデルの間に関係がlistingありphotoます。listings対応する を持たないのコレクションをコンパイルしていますphotos。Eloquent には、関連するレコードを持つレコードを見つけるための便利な方法があります。

$listings = Listing::has('photos')->get();

hasメソッドの逆の存在を知りません。ある場合は、お知らせください。

とにかく、これは私が問題を解決した方法です:

// fetch all the listings, eagerly loading the photos relationship
$listings = Listing::with('photos')->get();

foreach ($listings as $key => $listing)
{
    // if the listing has photos, remove it from the collection
    if (count($listing->photos) != 0)
    {
        unset($listings[$key]);
    }
}

これはうまくいきますが、知識を広げようとしています。collections に関する Laravelのドキュメントを読むと、コレクションをフィルタリングする例があります。

$users = $users->filter(function($user)
{
    if($user->isAdmin())
    {
        return $user;
    }
});

forこの方法を使用してループを書き直しました。

$listings = $listings->filter(function($listing)
{
    // Keep listings with no photos
    if (count($listing->photos) == 0)
    {
        return $listing;
    }
});

結果の$listingsオブジェクトはどちらの場合も同じです。どちらか一方の方法を選択する説得力のある理由はありますか、それとも単に個人的な好みの問題ですか?

4

1 に答える 1