【问题标题】:Laravel Eloquent Retrieve Records Which Has Null Fields Included RelationshipLaravel Eloquent 检索包含空字段关系的记录
【发布时间】:2021-06-04 11:56:59
【问题描述】:

我正在尝试获取具有关系的空字段的记录。我的 Deal 模型也是这样。

<?php

namespace App\Models;

class Deal extends Model
{
use HasFactory;
use SoftDeletes;

protected $fillable = [
    'id',
    'creator_user_id',
    'user_id',
    'owner_name',
    'person_id',
    'person_name',
    'stage_id',
    'title',
    'value',
    'currency',
    'formatted_value',
    'status',
    'won_time',
    'note',
    'source',
    'gender',
    'nationality',
    'city',
    'language',
    'passport_number',
    'arrival_airport',
    'arrival_flight_code',
    'arrival_date',
    'arrival_time',
    'hotel',
    'hotel_nights',
    'hotel_check_in_date',
    'hotel_check_out_date',
    'departure_airport',
    'departure_flight_code',
    'departure_date',
    'departure_time',
    'discount'
];

public function person()
{
    return $this->hasOne('App\Models\Person','id','person_id');
}

/**
 * Scope a query to all fields not filled.
 *
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
public function scopeNotFilled($query): \Illuminate\Database\Eloquent\Builder
{
    return $query
        ->orWhereNull('source')
        ->orWhereNull('gender')
        ->orWhereNull('nationality')
        ->orWhereNull('city')
        ->orWhereNull('language')
        ->orWhereNull('arrival_airport')
        ->orWhereNull('arrival_flight_code')
        ->orWhereNull('arrival_date')
        ->orWhereNull('arrival_time')
        ->orWhereNull('hotel')
        ->orWhereNull('hotel_nights')
        ->orWhereNull('hotel_check_in_date')
        ->orWhereNull('hotel_check_out_date')
        ->orWhereNull('departure_airport')
        ->orWhereNull('departure_flight_code')
        ->orWhereNull('departure_date')
        ->orWhereNull('departure_time')
        ;
   }
}

当我尝试使用下面的查询获取数据时

         return Deal::notFilled()->
         whereHas('person',function ($query){
            $query->orWhere('email',null);
         })
        ->where('won_time','>',Carbon::parse('2021-01-01'))
        ->orderBy('won_time', 'desc')
        ->paginate(15);

我可以获得包含一些空字段但不包括没有email 的关系的交易。我想获得具有空字段的交易,并且如果关系没有email 地址必须在列表中。我该如何解决这个问题?

【问题讨论】:

    标签: laravel eloquent scope relationship wherehas


    【解决方案1】:

    我已经解决了我的加入问题;

        return Deal::where('won_time','>',Carbon::parse('2021-01-01'))->
        join('people','people.id','=','deals.person_id')->
        where(function($q){
           $q->notFilled()
           ->orWhereNull('people.email');
        })->
        orderBy('won_time', 'desc')->
        select('deals.*')->
        paginate(15);
    

    如果有任何有效的方法来解决这个问题,我可以听到你的解决方案。

    【讨论】:

      猜你喜欢
      • 2016-03-25
      • 2015-07-23
      • 2016-04-29
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多