【问题标题】:How to create a laravel relationship model with a SQL query like this如何使用这样的 SQL 查询创建 laravel 关系模型
【发布时间】:2020-10-22 09:36:22
【问题描述】:

我有这样的查询

SELECT * FROM 'discussions' INNER JOIN comments ON comments.commentable_id = discussions.id WHERE discussions.user_id = 1 ORDER BY comments.id DESC

如何在 laravel 模型中创建关系

不适用于这样的查询生成器

DB::table('discussions')
    ->join('comments', 'comments.commentable_id', '=', 'discussions.id')
    ->where('discussions.user_id', '=', 1)
    ->orderBy('comments.id', 'DESC')
    ->get();```

【问题讨论】:

  • 您有多个 cmet 用于讨论,讨论模型是父模型,评论模型是子模型??
  • 您的真正意思是“不使用这样的查询生成器”吗?
  • 他的意思是:他想制作一个模型并将它们相互关联,以避免像示例中那样使用查询构建器。
  • 我已经解决了这个问题,谢谢

标签: php laravel eloquent-relationship


【解决方案1】:

首先你需要知道它是什么类型的关系。

One:OneOne:ManyMany:ManyMany:One

之后你可以看看documentation

您可以通过在终端中调用 php artisan make:model <name> 或手动创建它们来创建 2 个模型。

之后,您只需执行文档告诉您的任何操作。

假设您有一对多,其中一个讨论有多个 cmets,如果它是非常规命名,请务必在第二个参数中指定 foreign_key。

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Discussion extends Model
{
    /**
     * Get the comments for the discussions post.
     */
    public function comments()
    {
        // Watch the foreign_key in this instance 'commentable_id'
        return $this->hasMany(Comment::class, 'commentable_id');
    }
}

之后你可以调用类似的东西

$comments = Discussion::where('user_id', 1)->first()->comments

获取属于该讨论的所有 cmets

我不想成为一个混蛋,但documentation 确实是一个很好的信息来源。我建议您在开始开发之旅之前阅读所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-06
    • 2020-04-20
    • 2014-01-18
    • 2021-06-05
    • 2017-07-30
    • 2017-03-21
    • 2016-12-01
    相关资源
    最近更新 更多