【问题标题】:Laravel Relationship with EloquentLaravel 与 Eloquent 的关系
【发布时间】:2016-11-21 18:49:10
【问题描述】:

我有两个名为 products_description 的表,主键 products_id 和第二个表 orders_products,外键 products_id 链接这两个表。我们可以说一个产品可以有很多订单。

我为这两个表创建了以下模型。

namespace App;

use Illuminate\Database\Eloquent\Model;

class products_description extends Model
{
  protected $table = "products_description";
  protected $primaryKey = "products_id";

  public function orders_products()
  {
    return $this->belongsTo('App\Orders_product','products_id','products_id');
    return $this->hasMany(Orders_product::class);
  }
}

namespace App;

use Illuminate\Database\Eloquent\Model;

class Orders_product extends Model
{
    protected $primaryKey = "orders_products_id";
}

我的控制器类中的以下代码

class products_controller extends Controller
{
    public function show1(Products_description $Products_description)
  {
    return view('products.show',compact('Products_description'));   
  }
}

以下代码在我的 show.blade.php 文件中

@extends('layout')

@section('content')

{{ $Products_description->products_name }}

@foreach($Products_description->orders_products as $Orders_product)
  {{ $Orders_product->orders_id }}
@endforeach

@stop

我想先显示产品名称,然后是该产品所在的订单 ID。但我收到以下错误。没有 foreach 循环,产品名称显示正常。

试图获取非对象的属性(查看:C:\wamp\www\laravel1\resources\views\products\show.blade.php)

in 0bb3f93ed324818ac22ad70d47add00a1c4f8a7c.php line 11
at CompilerEngine->handleViewException(object(ErrorException), '1') in PhpEngine.php line 44
at PhpEngine->evaluatePath('C:\wamp\www\laravel1\storage\framework\views/0bb3f93ed324818ac22ad70d47add00a1c4f8a7c.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'Products_description' => object(products_description))) in CompilerEngine.php line 59
at CompilerEngine->get('C:\wamp\www\laravel1\resources\views/products/show.blade.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'Products_description' => object(products_description))) in View.php line 149

【问题讨论】:

    标签: laravel-5 eloquent


    【解决方案1】:

    首先这个函数有两个返回,应该去掉第一个:

    public function orders_products()
    {
        return $this->belongsTo('App\Orders_product','products_id','products_id');
        return $this->hasMany(Orders_product::class);
    }
    

    然后在你的控制器功能中:

    public function show1(Products_description $Products_description)
    {
        return view('products.show',compact('Products_description'));   
    }
    

    你不能只是compact('Products_description'),因为它是一个实例。

    public function show1(Products_description $Products_description)
    {
        $products = $Products_description->all();
        return view('products.show',compact('products'));   
    }
    

    以上是你需要的,或者只是$products = $Products_description->find($productID);

    【讨论】:

    • 通过从模型中删除第一行,它会在 'where 子句中给出以下错误 Unknown column 'orders_products.products_description_id'。因为 Laravel 或 Eloquent 试图从表名中获取主键和外键,所以我们如何定义与表名不同的主键和外键。
    • 其次,我使用了“路由模型绑定”和“类型提示”,我可以使用 compact('Products_description') 在 show.blade.php 上成功显示产品名称,看起来像这不是导致此错误的原因。
    【解决方案2】:

    我发现我在我的products_description 模型中使用了两个关系belongsTohasMany,而在我的hasMany 关系中没有使用foreign_keylocal_key。这实际上是问题所在。我删除了belongsTo 关系并将foreign_keylocal_key 添加到hasMany 关系,它就像一个魅力。

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2014-02-01
      • 2021-07-04
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2015-01-29
      • 2021-05-25
      • 2015-04-04
      相关资源
      最近更新 更多