【问题标题】:Adding additional constraints to Laravel Eloquent relations为 Laravel Eloquent 关系添加额外的约束
【发布时间】:2013-06-17 08:19:24
【问题描述】:
我有三张桌子:
Users
(id / username)
Folders
(id / name)
Folders_settings
(folder_id / user_id / order)
我希望能够选择用户的文件夹顺序。
在我的文件夹模型中:
//Folder Eloquent model
public function user()
{
return $this->belongsTo('user')
}
public function settings()
{
return $this->hasOne('FolderSettings');
}
我需要在 hasOne 关系中的 settings 关系中添加一个 user_id 约束。我该怎么做?
【问题讨论】:
标签:
laravel
laravel-4
eloquent
【解决方案1】:
这是通过在用户模型中设置关系自动完成的。
// Inside User.php
public function settings()
{
return $this->hasMany('FolderSettings');
}
// Inside FolderSettings.php
public function user()
{
return $this->belongsTo('User');
}
这应该选择 user_id 字段作为关系。然后,您可以(通过设置)获取特定用户的文件夹,如下所示:
User::with('settings.folders')->find(1);
【解决方案2】:
那么,你需要用户文件夹的顺序吗?
- 您希望 folders_settings 表将 用户 链接到 文件夹。
表格
用户 - id、用户名
文件夹 - id、名称
folders_settings - id、folder_id、user_id、订单
- 请注意,我的表格以小写字母开头,而且最后一个表格中有一个新字段。
模型
<?php
class User extends Eloquent
{
public function foldersetting()
{
return $this->hasOne('Foldersetting');
}
}
class Foldersetting extends Eloquent
{
protected $table = 'folders_settings';
public function user()
{
return $this->belongsTo('User');
}
public function folder()
{
return $this->belongsTo('Folder');
}
}
class Folder extends Eloquent
{
public function foldersetting()
{
return $this->hasOne('Foldersetting');
}
}
选择用户的文件夹顺序
$user = User::with('foldersetting')->find($id);
var_dump($user->foldersetting->order);
这应该可以解决问题。 PS:未经测试,所以让我知道(如果)问题。