2015-02-03 5 views
2

После того как я сохранил модель Eloquent, как я могу восстановить отношения с ней?Захват отношения сохраненной модели Eloquent

Так, например:

$model = new Foo; 
$model->save(); 
dd($model); //return an object of Foo 

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

dd($model->with('baz')->get()); 

Но это возвращает каждую запись Foo в базе данных с отношениями.

Я просто хочу получить текущую модель Baz, которая связана с сохраненной моделью Foo.

я мог бы сделать:

$result = Foo::with('baz')->find($model->id); 
dd($result); 

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

ответ

1

Просто только доступ к нему один раз, как это:

$model->baz 

И отношения будут загружены.

В качестве альтернативы вы можете ленивый нетерпеливый нагрузки отношение:

$model->load('baz'); 

Эффект тот же, хотя первый способ позволяет фактически использовать результат соотношения непосредственно. Если вы просто хотите иметь отношения в вашем массиве/выходе JSON, я предлагаю вам использовать второй метод, потому что он более ясен, что вы делаете.

+0

Спасибо, не прочитали о методе загрузки. – guidsen

0

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

class Foo extends Eloquent { 
    public function bazes() 
    { 
     return $this->hasMany('Baz'); 
    } 
} 

Тогда вы можете попробовать это:

$results = $model->bazes; 

или

$results = Foo::find($id)->bazes 

$ Результаты является итерацию коллекция bazes непосредственно связаны с foo-> id = x

Но если вы хотите с нетерпением загружать фильтры, то вы можете попробовать, как thi с:

$result = Foo::with(array('bazes' => function($query) 
{ 
    $query->where('id', $id); 

}))->get(); 

Я надеюсь, что это сработает для вас.

+0

Я знаю, что могу сделать это так, но это действие произойдет много, и я не хочу выполнять дополнительный запрос, только получив отношения. – guidsen

0

Вы должны заряжать существующие модели, используя load().

Попробуйте

$model = new Foo; 
$model->save(); 
$model->load('baz'); 
Смежные вопросы