Laravel-5.6中的关系

时间:2018-07-13 13:08:32

标签: eloquent laravel-5.6

我有三个如下表。

posts
    _id   - integer
    name - string

sentences
    _id      - integer
    post_id - integer
    name    - string

translations (word by word)
    _id          - integer
    post_id     - integer
    sentence_id - integer
    word_id     - integer
    name        - string

PostController.php中,我试图获取如下数据

return Post::with(['sentences', 'sentences.translations'])->limit(2)->get();

我在post.php模型中具有以下功能

protected $primaryKey = '_id';
public function sentences()
{
    return $this->hasMany('App\Model\sentence', 'post_id','_id');
}

我在sentences.php模型中具有以下功能

protected $primaryKey = '_id';
public function translations()
{
    return $this->hasMany('App\Model\translation', 'sentence_id','_id');
}

我想获取文章以及句子和翻译。

我可以获取帖子和句子,但是在尝试获取翻译时遇到了问题。

我得到translationssentence_id表中的id匹配的所有sentences,但是post_id与当前帖子{{ id表中的1}}。

1 个答案:

答案 0 :(得分:1)

如果您将主键命名为id以外的其他名称,则需要在每个模型上设置主键名称:

class Post extends Model {
    protected $primaryKey = '_id';
}

还要将您的关系与正确的名字匹配:

return $this->hasMany(Sentence::class, 'post_id','_id');