Laravel与SQL表的关系

时间:2020-03-27 20:44:45

标签: php laravel eloquent

我对Laravel并不陌生,过去大部分时间都集中在Codeigniter上,因为这是我工作的大部分时间。

我目前正在建立客户的网站,并且还在建立自定义CMS(针对客户的经验和特殊需求)。

目前,我正在努力弄清楚如何处理Laravel / Eloquent中的关系,例如,我有一个products表。每个产品可以有一个type。我将这些类型存储在一个单独的表中,以便将来在内容开始构建时可以更好地控制它们。我需要的是一个查询以获取所有具有相关类型的产品。在其他框架中,我可以简单地使用查询生成器来定义列和联接,但是由于Eloquent的工作方式,我正在努力寻找实现此目的的方法!

就上下文而言,在CMS中,将有一个product数据表,该表将显示系统中的所有产品,其中一列将为type,但是我想显示其名称。类型,而不是id

可能我很愚蠢,请随时指出一些明显的内容!

2 个答案:

答案 0 :(得分:0)

您可以搜索 with() 函数,它在此方面很有用: 在您的示例中,您需要将product模型与type模型相关联,以便在产品中添加

`public function type()
    {
      return $this->hasOne(Type::class);
    }`

并在类型中添加

public function Product()
{
  return $this->belongsTo(Product::class);
}

,您的查询将是

$result=Product::with("type")->get();

这将返回相关类型行,每个相关产品行为 this example get user with profile

,您可以从

获取每个产品行的类型名称
foreach($result as $res){
    $type_name=$res->type->name;
  }

答案 1 :(得分:0)

您要查找的是“急切加载”,它位于文档中:https://laravel.com/docs/5.8/eloquent-relationships#eager-loading

在网站上的示例中,您可以将其“书”替换为“产品”,然后将其“作者”替换为“类型”,您将实现您想要的目标。

如果要在视图中加载关系,即使用Blade,则需要执行以下操作:

@foreach($products as $product)
  <div> {{ $product->type->name }} </div>
@endforeach
相关问题