2016-07-19 238 views
0

我有兩個表products_description與主鍵​​和第二個表orders_products與外鍵​​鏈接這兩個表。我們可以說一個產品可以有很多訂單。Laravel與雄辯的關係

我爲這兩個表格創建了以下模型。

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 \資源\意見\產品\ 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 

回答

0

我想通了,我用兩個關係belongsTohasMany在我products_description模型和我hasMany關係不使用foreign_keylocal_key。其實是問題。我刪除了belongsTo關係並添加了foreign_keylocal_keyhasMany的關係,它的工作就像一個魅力。

0

第一這個函數有兩種回報,應該刪除第一個:

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);

+0

通過從模型中刪除第一行,它會在'where子句中給出以下錯誤Unknown列'orders_products.products_description_id'。因爲Laravel或Eloquent嘗試從表名中獲取主鍵和外鍵,所以我們如何定義與表名不同的主鍵和外鍵。 – Murtaza

+0

其次,我已經使用'路徑模型綁定'和'類型提示',我可以使用compact('Products_description'),它能夠在show.blade.php上成功顯示產品名稱,並且看起來不是這個原因錯誤。 – Murtaza