我在wordpress插件中使用Laravel的Eloquent。
产品型号:
<?php namespace GD;
use Country;
class Product extends \Illuminate\Database\Eloquent\Model
{
public function country()
{
return $this->belongsTo('Country', 'CountryId');
}
}
国家模型:
<?php namespace GD;
use Product;
class Country extends \Illuminate\Database\Eloquent\Model
{
public function products()
{
return $this->hasMany('Product');
}
}
我可以使用标准的Laravel语法查询任何模型:
$products = $this->product->where('MetalId', '=', 1)
->where('ProductTypeId', '=', '2')
->orderBy('Name')->orderBy('CountryId')
->get();
然而,我无法急切/懒惰加载相关模型:
$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 :(得分:1)
我最近遇到了同样的问题,这确实是命名空间问题。
尝试仅向命名空间字符串添加单个反斜杠,因为您使用单引号将它们括起来。
像这样:
return $this->belongsTo('GD\Country', 'CountryId');
and
return $this->hasMany('GD\Product');
另外,请确保您使用完整的命名空间。在我的应用程序中,我使用了'App \ Models \ ModelName'。
你的应用应该是'App \ Models \ GD \ ModelName'吗?这取决于您的申请结构。
让我知道这是否有效。