为Laravel Eloquent关系添加额外的约束

时间:2013-06-17 08:19:24

标签: laravel laravel-4 eloquent

我有三张桌子:

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关系中为设置关系添加user_id约束。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这是通过在Users模型中设置关系自动完成的。

// 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);

答案 1 :(得分:0)

那么,您需要用户的文件夹的顺序吗?

  • 您希望 folders_settings 表将用户链接到文件夹

<强>表格

用户 - id,用户名

文件夹 - id,name

folders_settings - id,folder_id,user_id,order

  • 请注意,我的表以小写字母开头,并且最后一个表中还有一个新字段。

<强>模型

    <?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:没有经过测试,所以让我知道(如果)问题。