Laravel 5.6 Eager Загрузка определенного столбца ничего не возвращает - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть два класса, Product и ProductFormat. Отношения определены правильно, мой продукт hasMany ProductFormat.

public function formats()
{
    return $this->hasMany(ProductFormat::class);
}

Когда я пытаюсь загрузить связь с определенными столбцами, как указано в документации (https://laravel.com/docs/5.6/eloquent-relationships#eager-loading),, она не работает должным образом.

Например, когда я делаю следующее:

Product::with('formats:id,upc')->get();

Я получаю свои продукты с пустыми форматами везде.

{
    id: 1,
    formats: [ ]
}

Однако, если я сделаю следующее:

Product::with('formats')->get();

Я получил ожидаемые форматы, но в нем слишком много ненужных столбцов.

{
    id: 1,
    formats: [
        {
            id: 1,
            upc: "101862422191",
            weight: 8.46,
            weight_unit: "kg"
        }
   ]
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

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

Product::with('formats:id,upc,product_id')->get();
0 голосов
/ 27 апреля 2018

У меня та же проблема, но я решил ее следующим образом:

// Change this in model 
public function formats()
{
    return $this->hasMany(ProductFormat::class)->select(['id', 'upc']); 
}

// No need to join here. 
$data = Product::all();
foreach ($data as $key => $value) {
    echo "<pre>";
    print_r($value->formats);
}

При этом вы получите необходимый формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...