2016-03-14 3 views
0

У меня есть Красноречивый BfsImages модель, определенная следующее соотношение:Eloquent отношение вызывает модельные гнездящееся

public function listing() 
{ 
    return $this->belongsTo('App\CommercialPeople\Models\BfsListings', 'bfs_listing_id', 'bfs_listing_id'); 
} 

и атрибут приложенное:

public function getPathAttribute() 
{ 
    return config('settings.bfs_image_path') . $this->listing->auth_agent_id . '/' . $this->filename; 
} 

Как вы можете видеть атрибут относится к родительской модели, поэтому, когда я вызываю следующее:

BfsListings::with('images')->all(); 

Хотя технически отношения от изображений до записей не вызывается из-за этой ссылки в пользовательском атрибуте. Модель BfsListing добавляется к изображениям, которые приводят к вложенности модели, поэтому я получаю BfsListing-> BfsImages-> BfsListing.

Вопрос в том, есть ли способ ссылаться на родительскую модель без фактического добавления ее и возврата ее данных? Или ... возможно, есть лучший способ передать переменную от родителя к ребенку, чтобы его можно было использовать, не возвращая отношения снова?

Чтобы быть честным, поскольку все мои модели кэшированы, мне все равно, что много запросов взад и вперед, я просто хочу удалить ненужные данные из модели изображений, однако я мог бы использовать некоторые умные способы обойти это, чтобы не дублируйте запрос.

Редактировать

его можно сослаться на другие модели без использования отношений, как это:

$this->listing()->setEagerLoads([])->first()->auth_agent_id; 

Однако это все еще означает, что ссылка на родительскую модель будет производиться один раз, что опять-таки вызывает два уровня вложенности (так что основная проблема не решена, но в некоторых случаях это поможет избежать бесконечных циклов).

Я до сих пор не могу понять, как вызвать родительскую модель, не загружая ее снова.

ответ

0

Вы можете переименовать родительскую -> дочернюю связь, затем получить доступ к родительскому элементу через псевдоним.

$a = $parent->child; 
$b = $a->parent; 
+0

И как именно это будет работать? Я загружаю модель следующим образом: '$ bfs = BfsListings :: с ('images') -> find ($ id); $ Bfs-> setAppends ([ 'listed_date']); return $ bfs; ' – peterstarling

Смежные вопросы