在比较数据透视表中的值和laravel 5.6中所需表中的值时,如何获取数据?

在比较数据透视表中的值和laravel 5.6中所需表中的值时,如何获取数据?,laravel,eloquent,laravel-5.2,Laravel,Eloquent,Laravel 5.2,我正在学习larvel 5.6,所以我尝试检索id大于pivot表中上次看到id的消息数 我有一个用户表,其中包含以下生成的默认列: php artisan make:auth 和具有以下列的消息表: id、发件人、消息内容、组id 组表中有以下列: id,类型 现在,通过自定义透视表,用户和组表之间存在多对多关系,该透视表具有以下列: 组id、用户id、上次看到的id 现在,如果我想检索属于同一组且id大于pivot表中最后一个id的消息,该怎么做?我想您正在寻找类似以下内容: $group

我正在学习larvel 5.6,所以我尝试检索id大于pivot表中上次看到id的消息数

我有一个用户表,其中包含以下生成的默认列:

php artisan make:auth
和具有以下列的消息表:

id、发件人、消息内容、组id

组表中有以下列:

id,类型

现在,通过自定义透视表,用户和组表之间存在多对多关系,该透视表具有以下列:

组id、用户id、上次看到的id


现在,如果我想检索属于同一组且id大于pivot表中最后一个id的消息,该怎么做?

我想您正在寻找类似以下内容:

$groupId = 1; // set to whatever you want    

$lastSeenId = \Auth::user()->groups()
    ->where('group_id', $groupId)
    ->first()->pivot->last_id_seen;
$messages = Message::where('id', '>', $lastSeenId)->get();
一个更健壮的版本是:

$groupId = 1; // set to whatever you want 

$group = \Auth::user()->groups()->where('group_id', $groupId)->first();
$lastSeenId = $group ? $group->pivot->last_id_seen : null;
$messages = Message::when($lastSeenId, function($query, $id) {
        $query->where('id', '>', $id);
    })->get();
注意:通常您会在第二个代码段中使用
optional()
,但是Laravel 5.2没有随此帮助程序提供


如果同时需要结果的
count()
,以及结果本身,可以将查询存储在变量中并使用它执行两个查询。这样就不必重写同一查询两次:

$groupId = 1; // set to whatever you want 

$group = \Auth::user()->groups()->where('group_id', $groupId)->first();
$lastSeenId = $group ? $group->pivot->last_id_seen : null;
$query = Message::when($lastSeenId, function($query, $id) {
        $query->where('id', '>', $id);
    });

$count = $query->count();
$messages = $query->get();

您在问题中指定了5.6,但是否有5.2标记?你有哪一个?错了吗?我想所有版本的Laravel之间都会有一些共同点,这就是为什么我在健壮的版本中添加了这个标记,我注意到您将两个参数传递给回调函数,$query和$id。。。id指的是什么?在健壮的版本中,我注意到您向回调函数传递了两个参数,$query和$id。。。id指的是什么?是的,
$callback
的第二个参数是您在($value,$callback)时给
的第一个参数<只有当
$value
的计算结果为
true
时,才会调用code>$callback
when()
函数只调用
if($value){$callback($query,$value);}
。您介意告诉我如何仅获取属于同一组且id大于上次看到的id的邮件的计数吗?将
->get()
替换为
->count()
,您已经在那里了。我将对我的答案做一个简短的补充,解释它。