PHP模型关联一对多如何给关联表加条件?

发布于 2022-09-07 19:55:16 字数 804 浏览 24 评论 0

我要拿出当前用户的通知列表(包括用户是否查看的状态,状态是在另一张表的,如果notice_record 存在 user——id的话,代表是已经阅读了)表结构如下

图片描述

图片描述

下面是我的代码

<?php
namespace appindexmodel;
use thinkModel;
class Notice extends Model
{

public function record()
{
    return $this->hasMany('NoticeRecord','notice_id');
}

}

//查询当前用户的通知列表(假设当前的用户id=100)
$list = Notice::hasWhere('record',['user_id'=>100])->select();

这样查出来的结果和我想象中的不一样,没有过滤掉 notice_record表中不属于 user_id=100的数据。是官方的BUG还是我使用出错了,我尝试$list = Notice::hasWhere('record',['user_id'=>100])->select();里面的user_id故意写错user_ids,报错说notice_record表没有这个字段,那么证明我的思路是对的,为什么结果和我想象的不一样,我很郁闷

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少年亿悲伤 2022-09-14 19:55:16

首先回答第一个问题

你要求的是 在 notice 表中存在,检索的时候 排除notice表中有的数据

你可以这样做,不需要模型关联

首先,取出 notice 表中的数据,只需要取出 user_id 字段的数据

public function getData(Notice $notic , User $user)
{

    $userIds = $notic->all()->pluck('user_id')->toArray();

    $users = $user->query()->whereNotIn('id' , $userIds)->get();

    dd( $users);
}

pluck 方法为给定键获取所有集合值 , 在通过 查询语句,使用 whereNotIn的 方式 查询数据

第二个问题 查询当前用户的通知列表

不是通过自增 id 来查询,前 100 条数据,

如果是使用 sql 语句查询 , 则使用 limit 0,100

使用laravel的话,则有一个take方法, 例如take(100)

hasWhere laravel 中好像没有这个方法噢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文