【问题标题】:Laravel - query self referencing tableLaravel - 查询自引用表
【发布时间】:2014-06-26 01:54:52
【问题描述】:

我有一个自引用表,上面有新闻及其各自的翻译作为孩子。我要做的是查询每个父新闻的翻译语言,以显示在我的索引新闻页面中。 在索引新闻页面中,我有一个表格,其中显示了我所有的父新闻:

  • 标题
  • 家长新闻语言
  • 儿童新闻语言(翻译)(这是我的问题!)
  • 编辑
  • 删除

有了这个,我想自动查看新闻所用的原始语言,并检查它是否已经被翻译。

我的代码是这样的:

表格

语言
- 身份证
- 代码

新闻
- 身份证
- parent_id
- lang_id
- 标题
- 身体

型号

语言.php

class Language extends Eloquent {

    public function news() {
        return $this->hasMany('News');
    }
}  

News.php

class News extends Eloquent {

    protected $table = 'newss';

    public function language() {
        return $this->belongsTo('Language','lang_id');
    }

    public function parent_news() {
        return $this->belongsTo('News','parent_id');
    }

    public function child_news() {
        return $this->hasMany('News','parent_id');
    }

}

有人知道如何查询这样的东西吗? 我相信这可能不是检查翻译的最佳解决方案,所以如果有人有任何简化这个想法的建议,我会很高兴收到你的来信。

谢谢,

【问题讨论】:

  • 谢谢 WereWolf,你的文章现在对我来说似乎有点不知所措,但我会试着消化它.. 这对我正在尝试的东西来说确实很有趣。
  • 最终将 child_news() 更改为 translation() 以提高可读性。我最后只需要这个 @if($news->translations->count()) @foreach($news->translations as $translation) {{ $translation->language->code }} @endforeach

标签: mysql laravel-4 multilingual self-referencing-table


【解决方案1】:
class News extends Eloquent {
    protected $table = 'newss';
    function newss(){
        return $this->hasOne('News', 'parent_id');
    }

文档说,对于自联接,请使用 hasOne 方法。

然后:

News::find($news->id)->news()->whereRaw('parent_id= parent_id')->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 2020-02-10
    • 2021-03-14
    • 1970-01-01
    • 2021-09-03
    • 2020-04-10
    • 2017-07-21
    • 2018-05-09
    相关资源
    最近更新 更多