无法使用whereIn

时间:2017-06-05 05:53:12

标签: laravel controller

我无法传递将其转换为数组的第一个查询集合。这是我的控制器

$memberfilters = MemberProfile::join('membership_histories', 'membership_histories.profile_id', '=','member_profiles.id')
        ->select('member_profiles.id','member_profiles.last_name','member_profiles.first_name','member_profiles.middle_name','member_profiles.name_ext','member_profiles.birthday','member_profiles.encoded_by')            
        ->addSelect(DB::raw('membership_histories.profile_id, membership_histories.log_reason, max(membership_histories.effective_date) as date, membership_histories.membership_type, membership_histories.country_name, membership_histories.sub_region_name'))       
        ->orderBy('member_profiles.last_name','ASC')
        ->where('membership_histories.country_name', 'Philippines')         
        ->groupBy('membership_histories.profile_id')    
        ->orderBy('date', 'desc')   
        ->get();

    $members = MemberProfile::join('membership_histories', 'membership_histories.profile_id', '=','member_profiles.id')
        ->whereIn('member_profiles.id', $memberfilters->toArray())
        ->get();

我将在第二个查询$ members上应用更多where方法,这就是为什么我必须使用whereIn将它传递给那里。有了这个逻辑,我的刀片视图中没有结果'0'

@Alexey Mezenin 当我使用->whereIn('member_profiles.id', $memberfilters->pluck('id'))时,我收到此错误

  

ComputeAge.php第13行中的ErrorException:   试图获得非对象的属性

这是我的ComputeAge.php

namespace App\Library;
use App\MemberProfile;
use DateTime;

class ComputeAge
{
// Compute age based on given birthday.
public static function show($id) 
{
    $from = new DateTime(MemberProfile::find($id)->birthday);
    $to   = new DateTime('today');
    $age = $from->diff($to)->y;

    return $age;
}
}

2 个答案:

答案 0 :(得分:1)

您可以像Alexey一样回答pluck()解决您的第一个问题。适合您的年龄计算问题。你可以利用碳来做到这一点。

<?php

namespace App\Library;

use Carbon\Carbon;
use App\MemberProfile;

class ComputeAge
{
    public static function show($id)
    {
        $user = MemberProfile::findOrFail($id);
        $age = $user->birthday->diffInYears(Carbon::now(), false);
        return $age;
    }
}

如果您的生日字段不是碳的实例,请执行此操作。

$age = Carbon::parse($user->birthday)->diffInYears(Carbon::now(), false);

如果您以后不需要生日值的负值,那么您只需拨打diffInYears()

答案 1 :(得分:0)

使用pluck(),例如:

->whereIn('member_profiles.id', $memberfilters->pluck('id')) // Or member_profiles.id instead of id