2017-01-17 3 views
0

Я использую whereHas во вложенном where where, но я не могу этого сделать. Ниже моя модель:Laravel: Не удалось получить доступ. Отношение toMany вложенное whereHas

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    public function scopePickedUser($query, $pickedTypeID) 
    { 
     return $query->where(function($query) use ($pickedTypeID) 
     { 
      $query->whereHas('photos', function($query) use ($pickedTypeID) 
      { 
       $query->whereTypeId($pickedTypeID); 
      }); 


      if($condition){ 
       $query->orWhere('another_column_id',$var); 
      } 
     }); 
    } 

    public function photos() 
    { 
     return $this->belongsToMany(Photo::class); 
    } 
} 

Если я называю, App\Models\User::pickedUser(4)->get() я получаю сообщение об ошибке BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::photos()'. Почему это? Что я делаю не так?

+0

Попробуйте этот раз App \ Models \ User :: с ('фото') -> pickedUser (4) -> Get() – vijaykumar

ответ

0

Просто напишите laravel with для Eager Loading и Lazy Eager Loading. Я думаю, вы можете попробовать эти два типа

App\Models\User::with('photos')->pickedUser(4)->get() 

Или

public function scopePickedUser($query, $pickedTypeID) 
    { 
     $query->load('photos'); 
     return $query->where(function($query) use ($pickedTypeID) 
     { 
      $query->whereHas('photos', function($query) use ($pickedTypeID) 
      { 
       $query->whereTypeId($pickedTypeID); 
      }); 


      if($condition){ 
       $query->orWhere('another_column_id',$var); 
      } 
     }); 
    } 
Смежные вопросы