鍍金池/ 問答/PHP  Python/ PHP模型關(guān)聯(lián)一對多如何給關(guān)聯(lián)表加條件?

PHP模型關(guān)聯(lián)一對多如何給關(guān)聯(lián)表加條件?

我要拿出當(dāng)前用戶的通知列表(包括用戶是否查看的狀態(tài),狀態(tài)是在另一張表的,如果notice_record 存在 user——id的話,代表是已經(jīng)閱讀了)表結(jié)構(gòu)如下

圖片描述

圖片描述

下面是我的代碼

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

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

}

//查詢當(dāng)前用戶的通知列表(假設(shè)當(dāng)前的用戶id=100)
$list = Notice::hasWhere('record',['user_id'=>100])->select();

這樣查出來的結(jié)果和我想象中的不一樣,沒有過濾掉 notice_record表中不屬于 user_id=100的數(shù)據(jù)。是官方的BUG還是我使用出錯(cuò)了,我嘗試$list = Notice::hasWhere('record',['user_id'=>100])->select();里面的user_id故意寫錯(cuò)user_ids,報(bào)錯(cuò)說notice_record表沒有這個(gè)字段,那么證明我的思路是對的,為什么結(jié)果和我想象的不一樣,我很郁悶

回答
編輯回答
只愛你

首先回答第一個(gè)問題

你要求的是 在 notice 表中存在,檢索的時(shí)候 排除notice表中有的數(shù)據(jù)

你可以這樣做,不需要模型關(guān)聯(lián)

首先,取出 notice 表中的數(shù)據(jù),只需要取出 user_id 字段的數(shù)據(jù)

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的 方式 查詢數(shù)據(jù)

第二個(gè)問題 查詢當(dāng)前用戶的通知列表

不是通過自增 id 來查詢,前 100 條數(shù)據(jù),

如果是使用 sql 語句查詢 , 則使用 limit 0,100

使用laravel的話,則有一個(gè)take方法, 例如take(100)

hasWhere laravel 中好像沒有這個(gè)方法噢
2018年1月31日 22:25