我正在设置两个模型。假设我们有一个投资组合和投资组合_分类表
表格投资组合
id
cat_id
name
status
表格组合_分类
cat_id
cat_name
型号
class Portfolio extends 'Eloquent {
protected $fillable = [];
public function portfolio_category()
{
return $this->hasMany('Portfolio_category');
}
}
class Portfolio_category extends 'Eloquent {
protected $fillable = [];
public function portfolio()
{
return $this->belongsTo('Portfolio');
}
}
我的代码:
$data = Portfolio::all();
foreach($data as $value){
$id = $value['id'];
$name = $value['name'];
$cat_name = $value['cat_name'];
}
我想显示类别名称,但它显示空值。
我很困惑,出了什么问题?任何想法!!!
我得到了答案
$data = Portfolio::join('portfolio_category', 'portfolio_category.cat_id', '=', 'portfolio.cat_id')->get();
foreach($data as $value){
$id = $value['id'];
$name = $value['name'];
$cat_name = $value['cat_name'];
}
您的关系定义不正确。在代码中,您尝试将Portfolio定义为父项,将Portfolio_category定义为子项。但是,您的表设置为Portfolio_category是父表,Portfolio是子表。基本上,包含外键的表(公文包表具有portfolio_category的外键)应该在belongsTo一侧。
因此,需要将其切换为portfolio_category hasMany portfolio_category和portfolio belongsTo portfolioc_ategory,而不是portfoliohasMany投资组合和投资组合belongsToPortfolio_catagory。
此外,为了简洁起见,我假设这些属性已被删除,但portfolio_category表上的表名和主键不符合Laravel约定,因此需要在模型中指定这些属性。
你的模型应该看起来像:
class Portfolio extends 'Eloquent {
protected $table = 'portfolio';
protected $fillable = [];
public function portfolio_category()
{
return $this->belongsTo('Portfolio_category');
}
}
class Portfolio_category extends 'Eloquent {
protected $table = 'portfolio_category';
protected $primaryKey = 'cat_id';
protected $fillable = [];
public function portfolios()
{
return $this->hasMany('Portfolio');
}
}
现在,您可以通过以下关系访问相关表:
$data = Portfolio::with('portfolio_category')->get();
foreach($data as $value){
$id = $value->id;
$name = $value->name;
$cat_name = $value->portfolio_category->cat_name;
}
有关Eloquent ORM的更多信息,可以在此处(L4.2)或此处(L5.0)找到文档。