2015-06-30 50 views
0

的關係定義如下:深厚的關係與丟棄記錄在Laravel 5.1雄辯模型

Apples hasMany Grapes hasMany Bananas hasOne Pineapple 

我想能夠做到以下幾點:

$apple = \App\Apple::find(1); 
$pineapples = $apple->pineapples 

我有所實現這通過定義以下內容在Apple.php

public function pineapples(){ 
    $apple = $this; 
    return Pineapple::whereHas('banana', function($banana) use ($apple) 
    { 
    $banana->whereHas('grape', function($grape) use ($apple) 
    { 
     $grape->where('apple_id', '=', $apple->id); 
    }); 
    })->get(); 
} 

但是,添加了c複製一些Banana記錄可以被軟刪除(刪除)。我是否可以更優雅地獲得與Apple有遠親關係的所有Pineapples?是否也可以包含那些被垃圾記錄「封鎖」的垃圾?

回答

0

我解決了這個問題,使用範圍和惰性加載。

Pineapple.php

public function scopefromApple($query, $appleId = 1) 
{ 
    $query->join('bananas', 'bananas.id', '=', 'pineapples.banana_id') 
     ->join('grapes', 'grapes.id', '=', 'bananas.grape_id') 
     ->join('apples', 'apples.id', '=', 'grapes.apple_id') 
     ->where('apples.id', '=', $appleId); 
} 

這允許我使用\App\Pineapple::fromApple()成功。在這種情況下,我需要包括Banana記錄:

$pineapples = \App\Pineapple::fromApple(); 
$pineapples->load([ 
    'banana' => function ($query){ 
     $query->withTrashed(); 
    } 
]);