【问题标题】:laravel join with json stringlaravel 加入 json 字符串
【发布时间】:2022-11-20 08:31:24
【问题描述】:

我在 laravel 中有 2 个表,一个是 comment 表,第二个是 users 表,在评论表中我有这种类型的数据

对于这个评论表,我想匹配 json 中的 tags 列的用户标识,那么我们如何才能将该用户标识与用户表连接起来呢?这是我尝试过的,但没有按预期工作,

$messages = TopicComment::where('user_id', $currentUserId)
        ->join("users","users.id","=","users.id")
        ->(function ($query) {
              $query->whereJsonContains('tags.userid',users.id);
        })
        ->
        ->get()->toArray();

【问题讨论】:

  • 你的TopicComment模型上定义的User有关系吗?

标签: laravel laravel-8


【解决方案1】:

使用此包,您可以通过 json 字段创建关系 https://github.com/staudenmeir/eloquent-json-relations

【讨论】:

    【解决方案2】:

    首先,您的代码中似乎存在许多错误。

    1. 从数据库架构来看,您的 cmets 表中没有 user_id 列,因此 ::where('user_id', $currentUserId) 将不起作用。
    2. 您的join 声明中也出现了类似的问题。您正在加入"users.id","=","users.id",这是同一个表中的同一列。
    3. function($query)行中没有调用任何方法。理想情况下,应该是 where 子句。
    4. whereJsonContains 的正确用法是:
      $query->whereJsonContains('tags', ['userid' => $currentUserId]);
      
      1. 在那条线之后的胭脂箭。

      因此,更正更改后的最终结果应如下所示:

      use IlluminateSupportFacadesDB;
      ...
      
      $messages = Comment::join('users', 'users.id', DB::Raw("CAST(comments.tags->'$.userid' AS UNSIGNED)"))
                  ->where(function ($query) use ($currentUserId) {
                      $query->whereJsonContains('tags', ['userid' => $currentUserId]);
                  })
                  ->get()
                  ->toArray();
      
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2012-05-16
      • 2021-12-14
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2019-12-18
      相关资源
      最近更新 更多