当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.1-查询数据透视表使用雄辩

曹智
2023-03-14

我正在使用Laravel5.1进行CMS开发。我有一个简单的帖子结构,用户和用户都可以喜欢帖子。

帖子和用户有多对多关系,并使用数据透视表来表示关系。

职位模型有

public function likedby()
{
    return $this->belongsToMany('App\Models\User','user_like_post')
        ->withTimestamps();
}

用户模型有

public function likes(){
    return $this->belongsToMany('App\Models\Post','user_like_post')
        ->withTimestamps();
}

我想列出用户的最新活动。例如。

  1. Username1喜欢Post2
  2. Username5喜欢Post9
  3. 用户名30喜欢Post25

我知道我必须像这样编写sql查询-

mysql > select users.name, posts.heading from user_like_post as ulp 
      > join users on ulp.user_id=users.id 
      > join posts on ulp.post_id=posts.id 
      > order by ulp.created_at desc limit 10;

上面的查询工作正常,但有没有办法使用laravel雄辩?

共有1个答案

濮阳霄
2023-03-14

如果您想要纯雄辩的解决方案,则需要为数据透视表添加其他模型:

class PostUser extends Model {
  protected $table = 'user_like_post';
  public function post()
  {
    return $this->belongsTo(Post::class);
  }

  public function user()
  {
    return $this->belongsTo(User::class);
  }
}

// then something like this
$activity = PostUser::latest()->take(10)->get();

@foreach ($activity as $action)
  {{ $action->user->name }} likes {{ $action->post->title }}
@endforeach

除此之外,您还需要连接,以便根据透视表对结果进行排序。

 类似资料:
  • 问题内容: 我想显示给定下表的数据透视表(交叉表)。 桌子: 插入: 现在,我想显示上述数据的数据透视表,如下所示: 预期结果 : 说明 :我想显示的每个员工都有,这是目前所有员工,节目中有多少组的员工可用,必须显示该员工在其他的也GROUP_NAME没有分配给哪些可用最后必须以数据透视格式显示。 问题答案: SELECT * FROM crosstab( $$SELECT grp.*, e.gr

  • 问题内容: 我的MySQL数据库具有以下列标题: 我有兴趣根据typeOfWork和月份显示结果。例如,所有typeOfWork条目将显示在左侧的第一列中,并且每个字段将在每一列的指定月份总计该特定typeOfWork。因此,我的SQL数据透视表语句当前为: 我目前遇到语法错误,指定了最后一行(从’DEC到ROLLUP’)。我感到困惑的原因是,我只是从脚本中的另一个工作枢轴表改编了该表。我认为差异

  • 问题内容: 问题1: 我有一个具有以下结构和数据的表: 我想以以下格式显示这些记录: 我知道我需要使用交叉表/数据透视查询来获得此显示。为此,我基于对它的有限知识对其进行了尝试。以下是我的查询: 根据此查询,我得到以下显示: 任何人都可以帮助我对查询进行适当的更改以获取单行而不是如上所述的多行记录。 问题2: 还有一种方法可以获取特定字段的值作为列的名称。正如你可以在上面看到我有,,…作为标题。取

  • 问题内容: 我在表中有数据,如下所示: 我想编写一个SQL查询,以便给出如下结果: 问题答案: Oracle 9i +支持: 您只列出了两列-可能应按年份将类似的内容分组。 有ANSI PIVOT(和UNPIVOT)语法,但是Oracle直到11g才支持它。在9i之前,您必须将CASE语句替换为Oracle特定的DECODE。

  • 问题内容: 以下查询执行得很好… 输出看起来像 但是我的疑问是如何获取列的动态字段值。 那是 , 如何使用以上查询 问题答案: 要使PIVOT动态,您必须编写一个存储过程。 然后,您可以这样称呼它:

  • 问题内容: 我知道这个话题无处不在,但我无法使其正常运行。这可能很简单。 这是基本查询后的数据示例: 我想要的是列名称是动态的: 到目前为止,根据我的研究,这是我整理的代码: 当我运行查询时,出现语法错误。 问题答案: 使用动态SQL 结果