2016-11-23 2 views
3

Ich stehe vor einem Problem. Kann mir jemand helfen Zum einen habe ich zwei ModelleWie Bedingungen in mehreren verknüpften Tabelle in Laravel 5.2

1) User.php

enter code here 
public function listings(){ 
    return $this->hasOne('App\Listing','user_id') 
      ->with("topservices"); 
} 

Jetzt habe ich Listing Modell

2) (Listing.php)

enter code here 
public function topservices(){ 
    return $this->hasMany('App\Sellerprofile','list_id'); 
} 

Jetzt Ich habe eine Funktion

enter code here 
public function nails(){ 
    $users = DB::table('users') 
     ->where(['service_name'=>"Seller"]) 
     ->get(); 
    $users = json_decode(json_encode($users),true); 
    foreach($users as $alluser){ 
     $ids[] = $alluser['id']; 
    } 
    if(!empty($ids)){ 
      $allData = User::with('listings')->whereIn('id',$ids)->get(); 
      $allData = json_decode(json_encode($allData),true); 
      echo "<pre>"; print_r($allData); die; ///when i print this array it gives me below output 

    } 
    $title = "Nails"; 
    return view("listings.listing",['allData'=>$allData,'title'=>$title]); 
} 

Ausgang:

enter code here 
Array 
(
[0] => Array 
    (
     [id] => 1 
     [title] => Mr 
     [firstname] => kunal 
     [email] => [email protected] 
     [listings] => Array 
      (
       [id] => 1 
       [user_id] => 1 
       [type] => premimum 
       [business_name] => kunal 
       [topservices] => Array 
        (
         [0] => Array 
          (
           [id] => 5 
           [service_id] => 1 
           [list_id] => 1 
           [name] => Acrylic 
           [duration] => 10mins 
           [price] => 10 
          ) 

         [1] => Array 
          (
           [id] => 6 
           [service_id] => 2 
           [list_id] => 1 
           [name] => Hair Top 
           [duration] => 30mins 
           [price] => 20 
          ) 

         [2] => Array 
          (
           [id] => 7 
           [service_id] => 3 
           [list_id] => 1 
           [name] => Skin Care Top 
           [duration] => 1hr-30mins 
           [price] => 30 
          ) 

         [3] => Array 
          (
           [id] => 8 
           [service_id] => 4 
           [list_id] => 1 
           [name] => Massage Top 
           [duration] => 20mins 
           [price] => 50 
          ) 

        ) 
      ) 

    ) 

[1] => Array 
    (
     [id] => 2 
     [title] => Mr 
     [firstname] => kunal 
     [email] => [email protected] 
     [listings] => Array 
      (
       [id] => 2 
       [user_id] => 2 
       [type] => premimum 
       [topservices] => Array 
        (
         [0] => Array 
          (
           [id] => 9 
           [service_id] => 6 
           [list_id] => 2 
           [name] => Acrylic 
           [duration] => 30mins 
           [price] => 10 
          ) 

         [1] => Array 
          (
           [id] => 10 
           [service_id] => 6 
           [list_id] => 2 
           [name] => Powder gel nails 
           [duration] => 45mins 
           [price] => 20 
          ) 

         [2] => Array 
          (
           [id] => 11 
           [service_id] => 6 
           [list_id] => 2 
           [name] => Polish change 
           [duration] => 10mins 
           [price] => 25 
          ) 

         [3] => Array 
          (
           [id] => 12 
           [service_id] => 6 
           [list_id] => 2 
           [name] => Hand design 
           [duration] => 2hrs 
           [price] => 100 
          ) 

         [4] => Array 
          (
           [id] => 13 
           [service_id] => 7 
           [list_id] => 2 
           [name] => Hair Top 
           [duration] => 30mins 
           [price] => 200 
          ) 

        ) 
      ) 

    ) 
) 

Jetzt Sie oben Ausgang gesehen gibt es Topservices Array i unter topservices all jene Array wollen, deren Preis größer als = 10 und kleiner gleich 30 Mein erwartete Ausgabe ist: -

enter code here 
Array 
(
[0] => Array 
    (
     [id] => 1 
     [title] => Mr 
     [firstname] => kunal 
     [email] => [email protected] 
     [listings] => Array 
      (
       [id] => 1 
       [user_id] => 1 
       [type] => premimum 
       [business_name] => kunal 
       [topservices] => Array 
        (
         [0] => Array 
          (
           [id] => 5 
           [service_id] => 1 
           [list_id] => 1 
           [name] => Acrylic 
           [duration] => 10mins 
           [price] => 10 
          ) 

         [1] => Array 
          (
           [id] => 6 
           [service_id] => 2 
           [list_id] => 1 
           [name] => Hair Top 
           [duration] => 30mins 
           [price] => 20 
          ) 
        ) 
      ) 

    ) 

[1] => Array 
    (
     [id] => 2 
     [title] => Mr 
     [firstname] => kunal 
     [email] => [email protected] 
     [listings] => Array 
      (
       [id] => 2 
       [user_id] => 2 
       [type] => premimum 
       [topservices] => Array 
        (
         [0] => Array 
          (
           [id] => 9 
           [service_id] => 6 
           [list_id] => 2 
           [name] => Acrylic 
           [duration] => 30mins 
           [price] => 10 
          ) 

         [1] => Array 
          (
           [id] => 10 
           [service_id] => 6 
           [list_id] => 2 
           [name] => Powder gel nails 
           [duration] => 45mins 
           [price] => 20 
          ) 

         [2] => Array 
          (
           [id] => 11 
           [service_id] => 6 
           [list_id] => 2 
           [name] => Polish change 
           [duration] => 10mins 
           [price] => 25 
          ) 

        ) 
      ) 

    ) 
) 

Kann mir jemand helfen. Vielen Dank im Voraus Was mache ich in der Nagelfunktion?

Antwort

0

Hier fand ich die Lösung meiner eigenen.

enter code here 
$allData = User::with(['listings.topservices'=>function($query){ 
      $query->whereBetween('price',[10,350]); 
      }]) 
      ->whereIn('id',$ids)->get(); 
0

Sie können Ihre Methode ändern, um die Bedingung einzuschließen.
Sie whereBetween Methode verwenden:

public function listings($lowerPriceLimit = null,$upperPriceLimit = null){ 
    $query = $this->hasOne('App\Listing','user_id'); 
    if($lowerPriceLimit != null && $upperPriceLimit != null) 
     $query = $query->with(["topservices"=>function($q) use($lowerPriceLimit,$upperPriceLimit){ 
          $q->whereBetween('price',[$lowerPriceLimit,$upperPriceLimit]); 
         }]); 
    else 
     $query->with("topservices"); 
    return $query; 
} 
+0

arbeitet nicht @jaysingkar its me Fehler geben (explode() erwartet Parameter 2 String zu sein, Objekt angegeben) :( – kunal

+0

Sie Preis zwischen denen Preisspalte verwenden, ist nicht in der Auflistung Tabelle ist es in topservices Hoffnung, die Sie verstehen es gibt mir einen Fehler (Unbekannte Spalte 'Preis' in 'Where-Klausel' (SQL: Wählen Sie * aus 'Listings', wo 'Listings'.' User-ID 'in (1, 2) und' Preis 'zwischen 10 und 30)) – kunal