2017-06-05 61 views
3

我有兩個型號稱爲項目和銷售,其中Laravel訪問外鍵使用雄辯Where子句

class Item extends Model 
{ 
    public function sale() 
    { 
     return $this->hasMany('App\Sale', 'sale_id'); 
    } 
} 

class Sale extends Model 
{ 
    public function item() 
    { 
     return $this->belongsTo('App\Sale', 'item_id'); 
    } 
} 

這是我的項目

public function up() 
    { 
     Schema::create('items', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('code'); 
      $table->string('name'); 
      $table->string('location'); 
      $table->double('buy_price'); 
      $table->double('sell_price'); 
      $table->integer('quantity'); 
      $table->timestamps(); 
     }); 
    } 

和遷移文件銷售

public function up() 
    { 
     Schema::create('sales', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->date('date'); 
      $table->integer('quantity'); 
      $table->double('sell_price'); 
      $table->double('subtotal'); 
      $table->integer('item_id')->unsigned(); 
      $table->timestamps(); 
     }); 

     Schema::table('sales', function (Blueprint $table) { 
      $table->foreign('item_id')->references('id')->on('items') 
        ->onDelete('cascade')->onUpdate('cascade'); 
     }); 
    } 

我記錄了每日銷售數據,以瞭解當天銷售的物品。因此我想每天查看銷售情況。這就是我在我的控制器中所做的。

class SaleController extends Controller 
{ 
    public function show($date) 
    { 
     $sales = Sale::where('date', $date)->get(); 
     return view('sale.detail', compact('sales')); 
    } 
} 

最後,在我的刀,我這樣做是爲了調用項目的信息

@foreach($sales as $sale) 
    <tr> 
     <td>{{ $sale->item->code }}</td> 
     <td>{{ $sale->item->name }}</td> 
     <td>{{ $sale->sell_price }}</td> 
     <td>{{ $sale->quantity }}</td> 
    </tr> 
@endforeach 

最終我得到試圖讓非對象的屬性 有人能賜教我的代碼有什麼問題? 我在Laravel中比較新,但我很想嘗試不同的事情來看看這個框架可以做什麼。

非常感謝

+0

你能分享銷售和物品表結構嗎?您可能想檢查是否所有結果都有相關的項目數據。如果你正在執行外鍵約束,這不應該發生。從錯誤中分享更多的行。 – Sandeesh

+0

我已添加移民代碼 –

回答

2

只是注意到你的關係被定義爲錯誤的。在item關係中將App\Sale更改爲App\Item。猜猜會有輕微的滑落。

class Sale extends Model 
{ 
    public function item() 
    { 
     return $this->belongsTo('App\Item', 'item_id'); 
    } 
} 
+1

我的天哪!你是對的!非常感謝。我想我真的需要休息幾個小時。 –

1

既然你需要訪問item對象多次,更好的方式來做到這一點是貪婪加載它:

public function show($date) 
{ 
    $sales = Sale::with('item')->where('date', $date)->get(); 
    return view('sale.detail', compact('sales')); 
} 

然後你就可以離開你的刀片文件它是。

+0

感謝您的迴應。我按照你的說法嘗試過,但我仍然得到同樣的錯誤。現在,我試圖改用原始查詢。無論如何謝謝你的回答 –

+0

你在哪一行得到錯誤?嘗試在變量中打印數據,以便您可以看到如何訪問所需的字段。 – ayip

+0

{{$ sale-> item-> code}}總是返回一個錯誤,試圖獲取非對象的屬性。然而{{$ sale-> item_id}}正常工作。這只是奇怪,我不能像平常一樣訪問相關的表 –