来自CodeIgniter的Datamapper ORM我仍然试图了解Laravel的Eloquent ORM。
鉴于我有一个ACCOUNT和一个USER表(简化):
ACCOUNT
- id
- name
USER
- id
- account_id
- username
一个帐户有很多用户。一个用户属于一个帐户。所以我们正在处理一对多的关系。一切都已在模型中设置。
在CodeIgniter的Datamapper中,我会做以下操作,以便从任何给定的ID中获取用户,同时检查该用户是否与当前帐户相关:
$u = new User();
$u->where('username', $username);
$u->where_related_account('id', $account_id);
$u->get();
if ( ! $u->exists()) exit; // or do something...
// otherwise continue to use the "$u" user object
这种语法非常合乎逻辑且易于理解。在Eloquent中,我很难用类似的简单语法实现相同的功能。有没有人有任何建议?
答案 0 :(得分:2)
非常简单(忽略用户和帐户之间的关系),它可能只是:
$u = User::where('username', $username)
->where('account_id', $id)
->get();
这将返回用户的详细信息。
否则,假设您的用户和帐户类和数据库表已正确设置(as per the Laravel docs),您应该可以这样做:
$user_exists = Account::find($account_id)
->users()
->where("username", "=", $username)
->first()
->exists;
if ($user_exists)
{
doThings();
}
答案 1 :(得分:0)
如果您正确设置了模型和数据库表(正如@msturdy所说),您实际上应该只需返回您的用户帐户:
$user = User::whereUsername($username)
->first(); // or User::where('username', $username)->first();
if ($user) {
$account = $user->accounts()
->whereId($account_id)
->first(); // or $user->accounts()->where('id', $account_id)->first();
}
这使您能够访问用户和帐户模型
您甚至可以扩展您的User
模型以包含以下方法:
class User extends Eloquent {
...
public static function byUsername($username) {
return static::whereUsername($username)->first();
}
public function getAccount($id) {
return $this->accounts()->whereId($id)->first();
}
...
}
然后简单地去
$user = User::byUsername($username);
if ($user) {
$account = $user->getAccount($account_id);
}
如果您在多个控制器中使用代码,那么对您来说可能会更好。