Слева Присоединяйтесь в отношении многих ко многим в Eloquent - PullRequest
0 голосов
/ 19 ноября 2018

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

@foreach($attributes as $attribute)
        {{ Form::bsText($attribute->name, $attribute->title, $customer->attributes()->find($attribute->id)->pivot->value ?? '') }}
@endforeach

Модель атрибута:

public function customers()
{
    return $this->belongsToMany(Customer::class);
}

Модель клиента:

public function attributes()
{
    return $this->belongsToMany(Attribute::class)->withPivot('value');
}

Контроллер:

public function show(Customer $customer)
{
    $attributes = Attribute::all();
    return view('admin.customers.show', compact('customer', 'attributes'));
}

1 Ответ

0 голосов
/ 19 ноября 2018

Опция Frist:

Вы можете переупорядочить индексы коллекции атрибутов клиента для идентификатора атрибута и обращаться к моделям в коллекции атрибутов клиента через идентификатор.

Контроллер:

$attributes = Attribute::all();
$customer = Customer::with('attribues')...
$customer->attributes = $customer->attributes->keyBy('id');

Представление:

@foreach($attributes as $attribute)
        {{ Form::bsText($attribute->name, $attribute->title, $customer->attributes[$attribute->id]->pivot->value ?? '') }}
@endforeach

Второй вариант:

Этот параметр основан на работе с коллекцией ->attributes вместо отношения ->attributes() куменьшить количество запросов к базе данных.

Контроллер:

$attributes = Attribute::all();
$customer = Customer::with('attribues')...

Просмотр:

@foreach($attributes as $attribute)
        {{ Form::bsText($attribute->name, $attribute->title, $customer->attributes->where('id', $attribute->id)->first()->pivot->value ?? '') }}
@endforeach

Первый вариант должен быть быстрее второго.

...