我的桌子:
用户:
SELECT * FROM ...
品牌:
statement stmt = (sql.prepare << "SELECT * FROM get_people()", into(person));
每个品牌的id fname email
都是id title user_id_made
user_id_made
表。
foreign key
模型中的:
users
用户模型中的:
Brand
我有这样的品牌列表:
public function user()
{
return $this->hasOne('App\Models\User','id');
}
在我的控制器中我写了这段代码:
public function brand()
{
return $this->belongsTo('App\Models\Brand','user_id_made');
}
在title of brand - email of user that made it
视图中我收到$data['brands'] = Brand::with('user')->simplePaginate(2);
错误:
foreach
答案 0 :(得分:1)
这将为该品牌提供用户的品牌标题和电子邮件。
$brands=Brand::with('user')->get();
foreach($brands as $brand)
{
print_r($brand->title);
print_r($brand->user->email);
}
品牌模型中的关系:
public function user()
{
return $this->hasOne('App\Models\User','user_id_made');
}
答案 1 :(得分:0)
你使用了错误的关系。 hasOne
用于一对一关系,但它应该是Brand
和User
之间的一对多关系。 (每个品牌由一个用户制作,每个用户可以制作多个品牌)
如果您声明Brand
hasOne
User
,则Laravel将假定users
表具有引用brands
表的外键。
相反,请修改您的关系方法以使用belongsTo
。
public function user() {
return $this->belongsTo('App\Models\User', 'user_id_made');
}
答案 2 :(得分:0)
由于Brand模型有外键,所以这就是了
belongsTo()
方法应该是。
如果您在命名外键user_id
时使用了约定
更直接。
但是,无论出于何种原因,您需要为该列添加user_id_made
名称,
这是你应该作为关系双方的第二个参数传递的。
User
应该有hasOne('App\Brand', 'user_id_made')
。
Brand
应该有belongsTo('App\User', 'user_id_made')
。