【问题标题】:Laravel eloquent arrays to remove matchingLaravel 雄辩的数组来删除匹配
【发布时间】:2018-09-23 22:32:10
【问题描述】:

我要两个雄辩的返回数组:

$services = \App\Service::all();
$userService = \App\UserService::where('user_id', Auth::user()->id)->get();

我尝试的是:

@foreach($services as $service){

    @foreach($userServices as $userService){
        @if($userService->service_id != $service->id)
            <option value="{{ $service->id }}">{{ $service->name }}</option>
        @endif
    @endforeach

@endforeach

但它会重复选项,并造成混乱。

什么是好的方法?

【问题讨论】:

  • Service和User是什么关系?是多对多吗?
  • @DimitrisKontoulis UserService 没有用户,关系是一对一的。意味着一个用户服务有一个服务。
  • 您检索数据两次。 uservice 足够你想做的事了

标签: php arrays laravel loops


【解决方案1】:

你可以试试这个:

$userServices = \App\UserService::where('user_id', Auth::user()->id)
->pluck('service_id')->toArray();

$services = \App\Service::whereNotIn('id',$userServices)->get();

//Now you can loop through services 
@foreach($services as $service){

    <option value="{{ $service->id }}">{{ $service->name }}</option>

 @endforeach

希望对你有帮助...

【讨论】:

    【解决方案2】:

    您需要在模型中使用嵌套关系。像这样;

    class Service extends Model
    {
        public function user_service()
        {
           return $this->hasMany(UserService::class, 'user_id');
        }
    }
    

    和控制器

    $user_id = Auth::user()->id;
    
    $services = Service::with(['user_service' => function ($query) use ($user_id) {
        $query->where('user_id', $user_id);
    }])->get();
    
    return view('page', compact('services'));
    

    【讨论】:

      【解决方案3】:

      我已经阅读了代码

      $services = \App\Service::all();
      $userService = \App\UserService::where('user_id', Auth::user()->id)->get();
      

        @foreach($services as $service){
      
        @foreach($userServices as $userService){
            @if($userService->service_id != $service->id)
                <option value="{{ $service->id }}">{{ $service->name }}</option>
            @endif
        @endforeach
       @endforeach
      

      Userservice 足以满足您的需求,无需两次检索数据。您可以在查询中简单地找到登录用户的所有服务 $user_id = Auth::user()->id;

      return Service::with(['user_service' => function ($query) use ($user_id) {
          $query->where('user_id', $user_id);
      }])->get();
      

      或尝试使用原始查询进行内部连接。

      【讨论】:

        【解决方案4】:

        如果您不想改变方法,只需将 != 更改为 ==

        @if($userService->service_id == $service->id)
        

        或者,如果您想要一个好的方法,请尝试 eloquent。

        你的模型似乎是多对多的关系

        访问此链接https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

        【讨论】:

          猜你喜欢
          • 2018-10-22
          • 2020-12-14
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          • 2015-06-25
          • 1970-01-01
          • 1970-01-01
          • 2014-07-27
          相关资源
          最近更新 更多