我是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
由于
答案 0 :(得分:3)
没有愚蠢的问题。我会尽力给你一个解释!我不是专业人士,但也许我可以提供帮助。 Laravel使用了一些非强制性的约定,但是如果你使用它们,那就像魅力一样。 例如,作为一般建议,表格应以复数形式命名(您的表格用户可以。您的“电子邮件”表格应为“电子邮件”)。该模型应以单数命名。这是表用户的User.php,表电子邮件的Email.php。 “数据透视表是从相关模型名称的字母顺序派生出来的......”,在本例中为“email_user”。我再说一遍,你没有义务像这样命名它们,因为你可以为模型中的$ table属性指定模型表。 设置完这样的内容后,您只需将其添加到用户模型中:
public function emails()
{
return $this->belongsToMany('Email');
}
在您的电子邮件模型中:
public function users()
{
return $this->belongsToMany('User');
}
括号内的“用户”和“电子邮件”是相关模型的名称。
就是这样。你现在可以这样做:
$user = User::find(1);
foreach($user->emails as $email) {
echo $email->subject . '<br>';
echo $email->message . '<br>';
}
如果您决定不遵守惯例,您仍然可以使用Eloquent关系。你必须建立这样的关系:
public function nameOfRelation()
{
return $this->belongsToMany('NameOfRelatedModel', 'name_of_table', 'foreign_key', 'other_key');
}
例如,对于User模型:
public function emails()
{
return $this->belongsToMany('Email', 'users_email', 'Uid', 'email_id');
}
在电子邮件模型中,反过来说。 答案很长!我没有测试代码,但这应该给你一个想法! 您可以随时查看Laravel官方文档,这真的很有帮助! http://laravel.com/docs/4.2/eloquent
希望我帮助