2016-07-22 3 views
1

versuchen id von jeder PersonHaben Sie Probleme bekommen Werte von foreach

$person = $request->input('person'); 
//values for person: Murdock,Wayne 
$values = explode(',' , $person); 

if(count($values) > 1) { 
    //count($values) = 2 
    foreach($values as $val) { 
     $get_id = Tag::where('name', $val)->get(); 

     foreach($get_id as $get) { 
      echo "id=".$get->id; 
      $result= FileTags::with('file')->where('tag_id', $get->id)->get(); 
     } 
    } 
} 

wenn ich zu bekommen tun echo $get->id gerade erst id = 1, wenn sich supossed zu id = 1 und id = 2

Murdock zu sein - ID: 1

Wayne - ID: 2

|table filetags| 
| id | tag_id | file_id | 
| 1 | 1 | 2 | 
| 2 | 1 | 3 | 
| 3 | 2 | 4 | 
| 4 | 3 | 1 | 

$result = FileTags::with('file')->where('tag_id', $id->id)->get(); 

ich sollte erhalten Dateien mit id 2,3 und 4

Modell TAG

public function fileTag() { 
    return $this->hasMany('App\FileTags'); 
} 

Modell Archiv

protected $table = 'files'; 

public function fileTag() { 
    return $this->hasMany('App\FileTags'); 
} 

Modell FileTags

public function tag() { 
    return $this->belongsTo('App\Tag' , 'tag_id'); 
} 

public function file() { 
    return $this->belongsTo('App\Archive', 'file_id'); 
} 

Danke für die Hilfe.

EDIT:

|table tag| 
    | id | name | 
    | 1 | Murdock | 
    | 2 | Wayne | 

Ergebnis aus obt_id $ echo;

[{"id":1,"name":"Murdock","description":"Description","type":"0","status":"1","created_at":"2016-07-20 18:01:14","updated_at":"2016-07-20 18:01:14"}][] 

von var_dump ($ obt_id)

array (size=1) 
    0 => 
    object(App\Tag)[267] 
     protected 'table' => string 'tags' (length=4) 
     protected 'fillable' => 
     array (size=4) 
      ... 
     protected 'connection' => null 
     protected 'primaryKey' => string 'id' (length=2) 
     protected 'keyType' => string 'int' (length=3) 
     protected 'perPage' => int 15 
     public 'incrementing' => boolean true 
     public 'timestamps' => boolean true 
     protected 'attributes' => 
     array (size=7) 
      ... 
      ... 
      ... 

C:\wamp64\www\Petro\app\Http\Controllers\CatalogedController.php:53: 
object(Illuminate\Database\Eloquent\Collection)[272] 
    protected 'items' => 
    array (size=0) 
+2

Sie überschreiben '$ result' in jeder Ausführung der Schleife. – ceejayoz

+0

können Sie mir eine Idee geben, wie man es bearbeitet? – Eliott

+0

Als erstes - korrigieren Sie diese Zeile 'if (count (Werte)> 1) {' to 'if (count ($ values)> 1) {'. Die zweite Sache - können Sie uns Zeilen in der 'Tag' Tabelle zeigen? – zajonc

Antwort

0

Sie eine Variable erstellen könnte, $result; initialisiere es als Empty Array und dann einfach alle Ergebnisse der Evaluierung des Codes: in das $result Array. Überprüfen Sie am Ende, ob das $result Array nicht leer ist. Wenn es nicht ist, können Sie einfach implodieren es Komma (vorausgesetzt, es ist ein String) und Ihre Ergebnisse echo ...

<?php 

    $person = $request->input('person'); 
    //values for person: Murdock,Wayne 
    $values = explode(',' , $person); 
    $result = array(); // <== INITIALIZE TO AN EMPTY ARRAY... 

    if(count($values) > 1) {  //<== $values NOT values... 
     //count(values) = 2 
     foreach($values as trim($val)) { //<== TRY TRIMMING OFF WHITE SPACES. 
      $get_id = Tag::where('name', $val)->get(); 
      foreach($get_id as $get) { 
       echo "id=".$get->id; 
       // PUSH THE DATA INTO THE ARRAY... 
       $result[] = FileTags::with('file')->where('tag_id', $get->id)->get(); 
      } 
     } 
    } 

    // CHECK IF $result IS NOT EMPTY 
    if(!empty($result)){ 
     // CONVERT THE ARRAY TO A STRING (ASSUMING ITS CONTENT ARE NOT OBJECTS OR ARRAYS) 
     $result = implode(", ", $result); 

     // ECHO OUR YOUR RESULT... 
     echo $result; 
    } 
+0

Sie konzentrieren sich auf '$ result' und Sie haben Recht, aber das Problem ist nicht, weil die Zeileneinstellung' $ result' keine dieser Variablen ändert: '$ Werte, $ val, $ get_id und $ get. Das Problem ist die Zeile 'echo "id =". $ Get-> id; 'gib immer' id = 1 'zurück. Sie haben recht, dass es "count ($ values)" geben sollte, aber es war wahrscheinlich ein Fehler mit copy/pase, weil 'count (values)> 1' ''false' zurückgibt und eine Warnung aufkommt, so dass der Code in diesem' if' steht niemals laufen. – zajonc

+0

Nun, das war mein Böser, es sollte 'if (count ($ values)> 1)' sein, aber das wahre Problem ist 'echo" id = ". $ Get-> id;' immer noch id = 1 – Eliott

+0

@Elio The Post wurde basierend auf einigen Beobachtungen und Annahmen aktualisiert ... – Poiz