Laravel Eloquent 获取比较为真的数据

Laravel Eloquent get data where comparison is true

我正在为一家时装店创建迷你库存。我将 Laravel/Voyager 与 BREAD 一起使用,一切正常。我有 2 tables SizesProducts 有一个共同的列 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 语句没有按预期工作。 我想根据 product_code 从 table Sizes

的每个尺寸得到相应的 stock

您错过了 运行 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();

Notice the ->get();

我认为你的做法是错误的。您的表在某种程度上 相关,您需要定义 关系 才能访问数据 Eloquently.

如果我正在构建这样一个数据库,我认为 ProductSize 之间的关系是 many to many。 IE。一个Product可以有很多Size,你也可以在某个Size里买很多Product。因此,您的模型之间应具有 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;
}

试试这个

$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