2016-03-18 8 views
2

Bu, Laravel 5.2 içindir. Bu iki kod parçası arasındaki farkın ne olduğundan emin değilim, ama bir tanesi referans olarak çalışıyor gibi görünüyor ve diğeri de öyle değil. Bu örnekteAktarım nesnelerini Laravel'e referans olarak gönderme

, sorgu nesnesi bir eylemi gerçekleştirmek için yanlış olup olmadığını kontrol etmek beni zorlar yöntem çağrısı, gelen değişikliklerin hiçbiri korur: Ancak

$query = new User(); 
$query = $this->processOrderByFields($query, $request, User::getOrderByFields()); 

if ($query === false) { 
    return $this->respondError(HTTP_UNPROCESSABLE_ENTITY); 
} 

public function processOrderByFields($query, $request, $availableFields) 
{ 
    # Get fields 

    foreach ($fields as $field) { 

     # Do things to the field... 

     if (# Not important) { 
      $query = $query->orderBy(# Field, # Direction); 
     } else { 
      $badFields[] = $field; 
     } 
    } 

    if ($badFields) { 
     return false; 
    } else { 
     return $query; 
    } 
} 

, bu iyi çalışır:

$query = new User(); 
$this->processInclude($query, $request, Client::getIncludeRelationships()); 

public function processInclude($query, $request, $objectRelationship) 
{ 
    if ($request->get('include') && is_array($request->get('include'))) { 
     $include = array_intersect($request->get('include'), $objectRelationship); 
     foreach($include as $relation) { 
      $query->with($relation); 
     } 
    } 
} 

Bunun, with yönteminin parçası olan ilişkiyle ilgili bir şey olduğunu tahmin ediyorum, ama emin değilim.

cevap

0

ben yayınlanmıştır önce bunu kontrol düşündüm, ama cevap yöntemleri konteyner ve üst nesnenin hem nasıl etkileşimde yalan gibi görünüyor:

Illuminate\Database\Eloquent\Model yılında:

public static function with($relations) 
{ 
    if (is_string($relations)) { 
     $relations = func_get_args(); 
    } 

    $instance = new static; 

    return $instance->newQuery()->with($relations); 
} 

Illuminate\Database\Query\Builder yılında :

public function orderBy($column, $direction = 'asc') 
{ 
    $property = $this->unions ? 'unionOrders' : 'orders'; 
    $direction = strtolower($direction) == 'asc' ? 'asc' : 'desc'; 

    $this->{$property}[] = compact('column', 'direction'); 

    return $this; 
} 

Yani, with bir sorgunun yeni bir statik örneğini oluşturur (bunun ne anlama geldiğinden emin değilim, ancak yöntemin geri gelmesinden sonra genel efektin devam ettiği gözüküyor), orderBy'nin zincirlenmesi gerekir. Bu benim deneyimimi doğrular, ancak with yönteminin nütası beni kurtarır.

Düzenleme:

Yani ikinci yöntem gerçekten işe yaramadı! Ben sadece bir ilişki ile bir bitiş noktası aramayı denedim kadar bu parametre artı diğerleri yerine geçirilen sorgu parametresi içerir. Görünüşe göre, with sınıfındaki statik örnek, diğer sorgu zincirleriyle aynı şekilde ($query = $query->...) geçirilmelidir.

Umarım bu birilerine yardımcı olur, çünkü birkaç saat boyunca buna takıldım.

İlgili konular