首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拉勒维尔雄辩:3表关系

拉勒维尔雄辩:3表关系
EN

Stack Overflow用户
提问于 2019-01-22 14:24:31
回答 1查看 89关注 0票数 0

我刚接触过Laravel-雄辩,我想把这个SQL翻译成雄辩的模式:

代码语言:javascript
运行
复制
select
    fl.id, fut.id, fut.firebase_topic_id, ft.id, fl.created_at
from
    firebase_logs fl,
    firebase_user_topics fut,
    firebase_topics ft
where
    fl.id = fut.firebase_log_id
    and
    fut.firebase_topic_id = ft.id
    and
    fl.created_at between '2019-01-09 16:33:39' and '2019-01-09 16:33:41'
    and
    ft.id = 1
    order by fl.created_at asc

其中:

代码语言:javascript
运行
复制
Firebase_logs.id (1) -> Firebase_user_topics.firebase_log_id (N)
and
Firenase_user_topics.firebase_topic_id (N) -> Firebase_topics.id (1)

FirebaseLog.php:

代码语言:javascript
运行
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class FirebaseLog extends Model
{
    public $incrementing = false;
    protected $primaryKey = 'id';

    public function user_topics() {
        //return $this->hasManyThrough(FirebaseTopics::class, FirebaseUserTopics::class);
        return $this->hasMany(FirebaseUserTopics::class);
    }
}

FirebaseUserTopics.php

代码语言:javascript
运行
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class FirebaseUserTopics extends Model
{
    protected $table = 'firebase_user_topics';

    public function log()
    {
        return $this->belongsTo(FirebaseLog::class);
    }

    public function topic()
    {
        return $this->belongsTo(FirebaseTopics::class);
    }    
}

FirebaseTopics.php

代码语言:javascript
运行
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class FirebaseTopics extends Model
{
    protected $table = 'firebase_topics';

    public function user_topics()
    {
        return $this->hasMany(FirebaseUserTopics, 'firebase_user_topics');
    }
}

我的控制器,可以很好地处理这个问题:

代码语言:javascript
运行
复制
$a = FirebaseLog::with('user_topics')->whereBetween('created_at', array('2019-01-09 16:33:39', '2019-01-09 16:33:41'))->get(); 
return $a;

但我不知道如何连接到FirebaseTopics继续构建代码,一些帮助将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 15:14:54

编辑的答案!

解决问题的方法是在您的hasOne模型中使用hasOne关系而不是belongsTo。它必须遵循;

代码语言:javascript
运行
复制
public function topic()
{
    return $this->hasOne(FirebaseTopics::class, 'id', 'firebase_topic_id');
}

因为您的FirebaseTopics模型与FirebaseUserTopics模型没有关系。"belongsTo“(用于使关系反转)在firebase_topics表中搜索firebase_topic_id字段,但该字段在firebase_topics表中没有。这就是为什么,你必须与关系直接,而不是相反。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54310362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档