【问题标题】:Eloquent relationships naming conventions雄辩的关系命名约定
【发布时间】:2015-07-23 05:08:26
【问题描述】:

我有分类文章

每篇文章属于一个类别的许多文章。

每个类别都有很多文章

文章数据库名称是“文章”

类别数据库名称是“article_categories”

class Article extends Model
{
    public function category()
    {
        return $this->belongsTo('App\ArticleCategory');
    }
}
class ArticleCategory extends Model
{
    public function articles()
    {
        return $this->hasMany('App\Article');
    }
}

现在我的问题是:我应该如何命名文章中将存储类别 ID 的列?

我试着给它命名:

article_category_id
articleCategory_id
article_categories_id
articleCategories_id

他们都不像我那样工作

$article->category 

雄辩地运行这个查询:

select * from `article_categories` where `article_categories`.`id` is null limit 1

谢谢

【问题讨论】:

    标签: php laravel eloquent laravel-5


    【解决方案1】:

    如果您在命名字段时遇到问题,您可以设置自己的键:

    public function category()
    {
        $this->belongsTo('App\ArticleCategory', 'local_key', 'parent_key');
    }
    

    因此您不必了解 Eloquent 使用的命名约定。

    【讨论】:

    • 谢谢我知道这一点,只是想了解什么列名可以让它工作而不告诉它的名字
    【解决方案2】:

    article_category_id 应该是正确的。

    您可以尝试替换此代码

    class Article extends Model
    {
        public function category()
        {
            return $this->belongsTo('App\ArticleCategory');
        }
    }
    

    如果可行,请使用下面的代码 类文章扩展模型

    {
        public function category()
        {
            return $this->belongsTo('App\ArticleCategory', 'article_category_id');
        }
    }
    

    【讨论】:

    • 它工作,但我希望它工作而不告诉他列名,它正在寻找什么列?因为我试图理解命名
    • 试试这个。类文章扩展模型 { public function articleCategory() { return $this->belongsTo('App\ArticleCategory'); } }。我想我有这样的问题。我觉得很奇怪。我所做的是将方法的名称更改为它以驼峰形式引用的模型的名称。
    • yap 这个工作.. 所以我真的不明白发生了什么。我认为函数名称对查询没有影响
    • 我知道。文档中没有说明。我认为了解它在做什么的最好方法是检查我现在没有时间的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多