【问题标题】:Many To Many relation laravel with the name "ImageCode"名称为“ImageCode”的多对多关系 laravel
【发布时间】:2013-06-16 23:02:19
【问题描述】:

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

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

多对多表的名称是'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”这个词建立正确的多对多关系

感谢您的建议!

【问题讨论】:

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


    【解决方案1】:

    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)。不幸的是,我没有答案。

    【讨论】:

    • doc.laravelbook.com/eloquent/#many-to-many 据此他们说“如果你想为你的数据透视表使用一个非常规的表名,你可以将它作为第二个参数传递给 belongsToMany 方法:”所以我认为你'错了,但我没有尝试过你的答案。今晚或者明天我会在另一个类似的东西上尝试一下。
    猜你喜欢
    • 2020-01-09
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2018-01-22
    • 2016-02-26
    • 2016-01-04
    • 2018-07-04
    相关资源
    最近更新 更多