2017-07-20 4 views
0

ich diese Fehlermeldung, wenn ich versuche, meinen Beitrag auf Postbote laufen:Laravel BadMethodCallExeption Query Builder erstellen

BadMethodCallException

Call to undefined Methode Illuminate \ Database \ Abfrage \ Builder :: Pfosten()

Meine Strecken sieht wie folgt aus:

Route::middleware('auth:api')->group(function() 
{ 
    Route::get('posts', ['as' => 'posts', 'uses' => 'Api\[email protected]']); 
} 

und die Steuerung wie folgt aus:

class PostController extends Controller 
{ 
    public function index() 
    { 
     $posts = Auth::client()->posts()->get(); 
     dd($posts); 
     return response()->json(['data' => $posts], 200, [], JSON_NUMERIC_CHECK); 
    } 
} 

Kundencenter Modell:

class Client extends Model implements AuthenticatableContract, 
             AuthorizableContract, 
             CanResetPasswordContract 
{ 
    use Authenticatable, Authorizable, CanResetPassword, HasApiTokens, Notifiable; 

    protected $table = 'clients'; 

    protected $fillable = ['name', 'email', 'password']; 
    protected $hidden = ['password', 'remember_token']; 


    public function posts() 
    { 
     return $this->hasMany(Post::class); 
    } 
} 

Und mein Beitrag Modell:

namespace App; 

use App\Client; 

use Illuminate\Database\Eloquent\Model; 

class Post extends Model 
{ 
    public function client() 
    { 
     return $this->belongsTo(Client::class); 
    } 
} 

Wenn ich das Dump: $posts = Auth::user()->get();

ich ein Ausgabe, aber ich möchte die Post-Ausgabe bekommen.

+3

Haben Sie eine Beziehung zwischen Benutzer und Postmodell definiert? –

Antwort

1

Sie sollten zuerst die Beziehung definieren.

<?php 

... 
class User extends Model 
{ 
    public function posts() 
    { 
     return $this->hasMany('App\Post'); 
    } 
} 

Sobald es definiert wurde, können Sie die Sammlung der Beiträge zugreifen, indem Sie die posts Eigenschaft zugreifen. Am wichtigsten ist, sollten Sie eine einzelne Zeile abzurufen zunächst Zugriff dann die Sammlung der Beiträge wie folgt aus:

$client = Client::find(1); 
$posts = $client->posts; 

Oder Sie können die Beziehung als Abfrage-Builder wie diese dienen:

$posts = App\Client::find(1)->posts()->where('name', 'tests')->get(); 

Iff es noch auftreten der Fehler, Sie sollten überprüfen, ob Auth::client() Client-Modellinstanz zurückgeben.

dd(Auth::Client()); 
+0

Ich habe meine Frage mit dem Modell aktualisiert. Macht es Ihnen etwas aus? Ich habe eine Kunden-Tabelle, die Struktur ist die gleiche wie die Benutzer-Tabelle. Ich bekomme immer noch den gleichen Fehler. – Olipol

+0

Ich habe meine Antwort aktualisiert. –

0

Ich bin nicht sicher, wie Sie Auth::client() definiert haben, aber durch einen Teil des Codes zu urteilen ist es eine falsche Vorstellung davon, wie Modelle instanziert werden, und welche get() tut.

get() gibt eine Ergebnissammlung zurück. Auth::user() gibt bereits eine Benutzerinstanz zurück. Wenn Sie Auth::user()->get() aufrufen, senden Sie eine zweite Abfrage an die Datenbank und geben eine Benutzerliste zurück. $user->posts()->get() hat eine konventionellere Methode für den Zugriff auf das Dataset, $ user-> posts.

Ich würde empfehlen, Ihre Auth::client() Methode auschecken und stellen Sie sicher, dass Sie nicht versehentlich eine neue Abfrage zurückgeben.