Проблема с энергичной загрузкой в ​​красноречивой модели - PullRequest
0 голосов
/ 08 марта 2019

У меня 2 модели и их отношения. Первый класс называется «Документо»:

class Documento extends Model
{
    protected $table = 'documento';
    protected $primaryKey = 'cod_documento';

    public function emisor()
    {
        return $this->belongsTo('App\Emisor', 'cod_emisor', 'cod_emisor');
    }
}

Второй называется «Эмисор»:

class Emisor extends Model
{
    protected $table = 'emisor';
    protected $primaryKey = 'cod_emisor';

    public function documentos()
    {
        return $this->hasMany('App\Documento', 'cod_emisor', 'cod_emisor');
    }
}

Отношение моделей один ко многим (один эмиссор имеет много документов, а один документ имеет только одного эмиссора).

В Thinker я пытаюсь получить эмиссор из документа, и это хорошо работает:

>>> Documento::find(1)->emisor->name
=> "Emisor Name"

Но когда я пытаюсь сделать Eager Загрузка эмиссора в документ, это «не получается»:

>>> Documento::find(1)->with('emisor')->count();
=> 94041

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

Почему это происходит? Как получить один документ с вложенным эмиссором?

1 Ответ

1 голос
/ 08 марта 2019

Своп find() и with():

$documento = Documento::with('emisor')->find(1);

Или используйте Ленивая нетерпеливая загрузка :

$documento = Documento::find(1)->load('emisor');

С существующим экземпляром модели:

$documento->load('emisor');

Вы получаете этот неожиданный результат, поскольку Documento::find(1)->with('emisor') создает новый запрос, который запрашивает все Documento записей. Отсюда и общее количество 94041.

...