gpt4 book ai didi

php - Laravel: Controller 中有 2 个数据库查询,而 1 个值取决于第一个查询

转载 作者:可可西里 更新时间:2023-11-01 08:04:11 24 4
gpt4 key购买 nike

我有两个表,产品和子产品。我还有一个 View ,其中显示有关产品的信息(查看从数据库动态生成的数据)。在此 View 中,应显示所有子产品。我怎样才能做到这一点?因为我在 View 中循环遍历第一个查询,而不是在 Controller 中。

Controller :

public function showSpecificProduct($name)
{
$name = strtolower($name);
$product = \DB::select('select * from products where name = ? LIMIT 1', [$name]);

$subProducts = \DB::select('select * from subproducts where mainproduct = ?', [/* id from $product belongs here */]);

return view('products.single', ['products' => $product, 'subproducts' => $subProducts]);
}

查看:

@foreach ($products as $product)
<div class="col-md-4">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ $product->name }}</h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<img src="{{ $product->img }}" alt="{{ $product->name }}" class="img-responsive">
</div>
</div>
<!-- /.box -->
</div>
@endforeach

此外,在 laravel 中执行第一个查询是否有更好的方法?因为我在只有 1 行的情况下使用 foreach 循环。

提前致谢

最佳答案

Controller

public function showSpecificProduct($name)
{
$product = Product::with('subproducts')->where('name', $name)->first();

return view('products.single')->with('products',$product);
}

查看

{{ $product->name }} // shows the name of the mainproduct no need for a foreach

要显示您必须执行 foreach 循环的子产品(如果它们很多)

@foreach (($product->subproducts as $subproduct)
{{ $subproduct->name}}
@endforeach

要做到这一点,您必须先在模型和迁移中设置关系

喜欢这个

1-迁移

产品迁移

public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->text('name');
$table->timestamps();
});
}

子产品迁移

public function up()
{
Schema::create('subproducts', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned();
$table->foreign('product_id')->references('id')->on('subproducts');
$table->text('name');
$table->timestamps();
});
}

如果您没有正确的外键设置,请刷新您的迁移

2-模型

将此添加到您的产品模型

编辑

public function subproducts() {
return $this->hasMany('App\Subproduct', 'product_id'); // you can this
}

子产品模型

public function product() { // i made a mistake here
return $this->belongsTo('App\Product');
}

现在可以随意使用 Eloquent ORM。

关于php - Laravel: Controller 中有 2 个数据库查询,而 1 个值取决于第一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38034347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com