【问题标题】:get value from another table based on id laravel根据 id laravel 从另一个表中获取值
【发布时间】:2020-11-08 23:18:44
【问题描述】:

我有两个表(工厂、产品)

工厂表有两列( id , factory_name )

Products 表有三列( id 、 factory_id 、 product_name )

我想根据 Products 表中的 factory_id 在 Blade.php 中的工厂表中显示 factory_name 列

工厂模型中的代码:

public function products()
{
    return $this->hasMany('App\Product');
}

以及产品模型中的代码:

public function factories()
{
    return $this->belongsTo('App\Factory');
}

ProductsController 中的代码:

public function index()
{
    $data['Products'] = Product::with('factories')->orderBy('created_at', 'desc')->get();
   
    return view('all_products')->with($data);
}

以及查看中的代码:

 @foreach ($Products as $Product)
   <tr>
   <td>{{$Product->id}}</td>
   <td>{{$Product->factory_name}}</td>
   <td>{{$Product->product_name}}</td>               
   </tr>
 @endforeach

这不起作用......所以我如何获得 factory_name

【问题讨论】:

    标签: laravel relationship


    【解决方案1】:

    将 {{dd($data)}} 添加到刀片文件以查看您拥有的内容总是一个好主意。

    我认为产品和工厂之间的关系是一对多的。在这种情况下,最好将函数名设为工厂而不是工厂。

    public function factory()
    {
        return $this->belongsTo('App\Factory');
    }
    

    除非它是我不熟悉的正确语法,否则问题应该是 $data['Products'] 和 with($data)。让我们改变它们:

    public function index()
    {
        $data = Product::with('factory')->orderBy('created_at', 'desc')->get();   
        return view('all_products')->with('Products', $data);
    }
    

    现在,您的刀片文件中有 $Products。

    由于您通过关系获取 factory_name,因此工厂信息与密钥相关联。你需要这个:

    <td>{{$Product->factory->factory_name}}</td>
    

    【讨论】:

      【解决方案2】:

      很容易像这样:

      @foreach ($Products as $Product)
         <tr>
         <td>{{$Product->id}}</td>
         <td>{{$Product->factories->factory_name}}</td>
         <td>{{$Product->product_name}}</td>               
         </tr>
       @endforeach
      

      因为您已经在两个模型之间建立了称为工厂的关系

      【讨论】:

        【解决方案3】:

        正如您所展示的,您正在尝试与工厂一起获取产品

        Product::with('factories')->orderBy('created_at', 'desc')->get();
        

        因此,您将从该查询中获得的结果将采用以下格式

        {
          id: product_id,
          factories: {
             id:factory_id,
             factory_name: factory_name,
             ...
          }
        }
        

        因此,为了获取产品列表中的工厂名称,您需要使用:

        <td>{{$Product->factories->factory_name}}</td>
        

        而不是

        <td>{{$Product->factory_name}}</td>
        

        希望这能解决您的问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多