许多与许多关系laravel与名称“ImageCode”

时间:2013-06-14 15:28:54

标签: many-to-many laravel laravel-4

我想知道我应该如何与包含两个单词的类/表建立多对多关系。

我创建了一个迁移数据库表,其名称为“image_codes”。我希望“用户”能够拥有许多“image_codes”,而一个“image_code”可以拥有许多“用户”。所以我的问题是我应该如何建立这种关系,以及我的模型应该被调用。

多对多表的名称是'image_code_user'

当我尝试这个时:

class ImageCode extends Eloquent {
    public $table = 'image_codes';

    public function users()
    {
        return $this->belongsToMany('User', 'image_code_user');
    }
}

class User extends Eloquent {
    public $table = 'users';

    public function image_codes()
    {
        return $this->belongsToMany('ImageCode', 'image_code_user');
    }
}


/**
 * The result below this lines....
 **/

$user = User::find(1);
var_dump($user->image_codes) 
// Outcome is NULL

我尝试了很多不同的方法,但总是有相同的结果,如果我做的话,它会起作用。

$image_code = ImageCode::find(1);
var_dump($image_code->users) 
// All users were returned

现在我开始怀疑我的表格是否有问题image_codes是不是可以使用包含两个单词的单词来谈论“ImageCode”。所以我尝试重新制作一切,然后使用名称“代码”代替。

多对多表的名称是'code_user'

class Code extends Eloquent {
    public $table = 'codes';

    public function users()
    {
        return $this->belongsToMany('User', 'code_user');
    }
}

class User extends Eloquent {
    public $table = 'users';

    public function image_codes()
    {
        return $this->belongsToMany('Code', 'code_user');
    }
}


/**
 * The result below this lines....
 **/

$user = User::find(1);
var_dump($user->codes) 
// All codes were returned

所以请堆栈溢出。有人能告诉我如何与'ImageCode'和'User'这个词建立正确的ManyToMany关系

感谢您的建议!

1 个答案:

答案 0 :(得分:0)

http://doc.laravelbook.com/eloquent/#one-to-one

根据文档,在User模型中,belongsToMany函数的第二个参数用于定义Image_Codes表的外键,而不是我假设您正在尝试的中间/数据透视/中间表的名称在这里做。

现在你有两个模型:ImageCode和User。

Laravel默认将这两个模型的名称组合为数据透视表的名称,在这种情况下,它是imagecode_user。

您可以先尝试删除belongsToMany函数的第二个参数,然后将数据透视表重命名为imagecode_user。

如果您坚持让您的数据透视表名为image_code_user,请将您的ImageCode模型重命名为Image_Code。

当然,完美的解决方案是将数据透视表名称定义为image_code_user,并使用名为ImageCode和User的两个模型,因为编写ImageCode :: find(1)然后编写Image_Code :: find更加优雅。 1)。不幸的是,我没有答案。