2013-12-10 54 views
1

我在一個wordpress插件裏面使用了Laravel的Eloquent。在Laravel外面使用口才 - 渴望/懶惰Loading相關型號

產品型號:

<?php namespace GD; 

use Country; 

class Product extends \Illuminate\Database\Eloquent\Model 
{ 
    public function country() 
    { 
     return $this->belongsTo('Country', 'CountryId'); 
    } 
} 

國家型號:

$products = $this->product->where('MetalId', '=', 1) 
->where('ProductTypeId', '=', '2') 
->orderBy('Name')->orderBy('CountryId') 
->get(); 

但是我不能急於/延遲加載:

<?php namespace GD; 

use Product; 

class Country extends \Illuminate\Database\Eloquent\Model 
{ 
    public function products() 
    { 
     return $this->hasMany('Product'); 
    } 
} 

我可以使用標準Laravel語法查詢任何模型相關型號:

$products = $this->product->with('country')->where('MetalId', '=', 1) 
->where('ProductTypeId', '=', '2') 
->orderBy('Name')->orderBy('CountryId') 
->get(); 

錯誤消息

Fatal error: Class 'Country' not found in .../vendor/illuminate/database/Illuminate/Database/Eloquent/Model.php on line 593 

所以我想這一定是一個命名空間的問題,所以我更新我的模型代碼:

return $this->belongsTo('\\GD\\Country', 'CountryId'); 

and 

return $this->hasMany('\\GD\\Product'); 

然而,當我運行的產品型號查詢,並vardump的結果,我得到:

["relations":protected]=> 
    array(1) { 
    ["country"]=> 
    NULL 
    } 
+0

你配置了類自動加載器嗎?如果另一個插件包含Eloquent文件,那麼你是如何處理這種情況的 - 特別是如果它是一個不同版本的Eloquent? –

回答

1

我最近有同樣的問題,它確實是一個名稱速度問題。

嘗試向名稱空間字符串添加單個反斜槓,因爲您使用單引號將它們括起來。

像這樣:

return $this->belongsTo('GD\Country', 'CountryId'); 

and 

return $this->hasMany('GD\Product'); 

另外,請確保您使用的是完整的命名空間。在我的應用程序中,我使用了'App \ Models \ ModelName'。

它應該是像你的應用程序'App \ Models \ GD \ ModelName'的東西嗎?這取決於您的應用程序結構。

讓我知道這是否工作。

+0

順便說一句,我只注意到模型定義中的名稱空間聲明。所以'GD \ ModelName'是正確的。但是,請嘗試單反斜槓建議。 – Shishir

+0

謝謝,但單個'\\'沒有任何區別。 – Gravy

+0

嘗試加載單條記錄。你能讀懂那個唱片的國家嗎?例如:Product :: find(product_id) - > country; – Shishir

相關問題