Laravel Eloquent получить данные, где сравнение верно - PullRequest
1 голос
/ 13 февраля 2020

Я создаю мини инвентарь для магазина модной одежды. Я использую Laravel / Voyager с BREAD и все хорошо. У меня есть 2 таблицы Sizes и Products с общим столбцом product_code.

Я хотел бы получить результаты из Sizes, где столбец product_code = Product 'product_code'. У меня есть этот запрос в контроллере:

$product_code = Product::all();
$allSizes = Size::where('product_code', ($product_code->product_code));

и в browse.blade. php У меня есть:

@foreach ($allSizes as $size)
    <tr>
        <td align="right">{{$size->size_name}}</td>
        <td align="right">{{$size->stock}}</td>
    </tr>
@endforeach 

Я думаю, оператор where не работает, как предполагалось к. Я хочу получить соответствующий stock на основе product_code для каждого размера из таблицы Sizes

Ответы [ 3 ]

2 голосов
/ 17 февраля 2020

Попробуйте

$product_code = Product::pluck('product_code')->toArray();
$allSizes = Size::whereIn('product_code', $product_code)->get();

и в browse.blade. php:

@foreach ($allSizes as $size)
    <tr>
        <td align="right">{{$size->size_name}}</td>
        <td align="right">{{$size->stock}}</td>
    </tr>
@endforeach 
1 голос
/ 14 февраля 2020

Я думаю, вы поступаете неправильно. Ваши таблицы связаны в некотором роде, и вам нужно определить отношение для доступа к данным Eloquent ly.

Если бы я создавал такие база данных, я думаю, что отношения между Product и Size это много ко многим . Т.е. у Product может быть много Size с, и вы также можете делать покупки за много Product с в определенном Size. Таким образом, ваши модели должны иметь отношение belongsToMany() друг к другу.

// Product.php
protected $with = ['sizes'];     // eager load product sizes
public function sizes() {
    return $this->belongsToMany(Size::class);
}

// Size.php
public function products() {
    return $this->belongsToMany(Product::class);
}

Тогда вы можете сделать

// ProductsController.php
public function show(Product $product) {
    return $product;
}
0 голосов
/ 13 февраля 2020

Вы пропустили запуск query

$product_code = Product::all();
# ::all() will return collection, and you can't access a property of it directly

$allSizes = Size::where('product_code', ($product_code->first()->product_code))->get();

Обратите внимание на -> get ();

...