我是laravel关系的新手,如果这只是一个愚蠢的问题,那么多人道歉 . 我在项目中使用名为users_email的数据透视表来获取用户的电子邮件 . 数据透视表包含外键Uid和Email_id . Uid引用用户表主键和Email_id相同 . 我可以使用QueryBuilder加入它们时获得结果 .
$recent_inbox_email=DB::table('users_email')->
join('email','users_email.email_id','=','email.Id')->
join('users','users_email.Uid','=','users.Id')->
where('users_email.Uid','=',$Uid)->
where('email.draft','<>','true')->
where('email.trash','<>','true')->
where('email.status','=','unread')->count();
这是我在模型中定义关系的方式
public function getUid()//User Model
{
return $this->hasMany("User_Email",'Uid');
}
public function getEmId()//Email Model
{
return $this->hasMany("User_Email",'email_id');
}
//User_Email Model
public function email()
{
return $this->belongsTo('Email','Id','email_id');
}
public function user()
{
return $this->belongsTo('User','Id','Uid');
}
现在我想用Eloquent查询这样的东西
$query= select * from users_email inner join
email on users_email.email_id=email.Id
inner join users on users_email.Uid=users.Id
where users.Id=users_email.Uid limit 0,10
foreach($query as $emails)
{
echo $emails->f_name;
echo $emails->Message
}
数据库设计师Pic Link to image
谢谢
1 回答
没有愚蠢的问题 . 我会试着给你一个解释!我不是专业人士,但也许我可以提供帮助 . Laravel使用了一些非强制性的约定,但是如果你使用它们,那么事情就像魅力一样 . 例如,作为一般建议,表格应以复数形式命名(您的表格用户可以 . 您的“电子邮件”表格应为“电子邮件”) . 该模型应以单数命名 . 这是表用户的User.php,表电子邮件的Email.php . “数据透视表是从相关模型名称的字母顺序派生出来的......”,在本例中为“email_user” . 我再说一遍,你没有义务像这样命名它们,因为你可以为模型中的$ table属性指定模型表 . 设置完这样的内容后,您只需将其添加到您的用户模型中:
在您的电子邮件模型中:
括号内的“用户”和“电子邮件”是相关模型的名称 .
就是这样 . 你现在可以这样做:
如果您决定不遵守约定,您仍然可以使用Eloquent关系 . 你必须 Build 这样的关系:
例如,在User模型的情况下:
而在电子邮件模型中,反过来说 . 答案很长!我没有测试代码,但这应该给你一个想法!您可以随时查看Laravel官方文档,这真的很有帮助! http://laravel.com/docs/4.2/eloquent
希望我帮忙