Ich habe eine Klasse Seller
dass extends
Laravel des User
Modell wie die folgendeLaravel - Erweiterung User-Modell
namespace App;
class Seller extends User{
public function products(){
return $this->hasMany(Products::class);
}
}
im ModelFactory.php
Ich habe den folgenden Code
$factory->define(Transaction::class, function (Faker\Generator $faker) {
$seller = Seller::has('products')->get()->random();
$buyer = User::all()->except($seller->id)->random();
return [
'quantity' => $faker->numberBetween(0, 3),
'buyer_id' => $buyer->id,
'product_id' => $seller->products->random()->id
];
});
Ich erhalte die folgende Fehler
Basis Tabelle oder View nicht gefunden: 1146 Tabelle 'tutorial.sellers' existiert nicht vorhanden (SQL: auswählen * von
sellers
wo existiert (wählen * ausproducts
wosellers
.id
=products
.seller_id
))
die Product
Klasse ist wie folgt
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model{
const AVAILABLE_PRODUCT = 'available';
const UNAVAILABLE_PRODUCT = 'unavailable';
protected $fillable = [
'name',
'description',
'quantity',
'status',
'image',
'seller_id'
];
public function isAvailable(){
return $this->status == Product::AVAILABLE_PRODUCT;
}
public function seller(){
return $this->belongsTo(Seller::class);
}
public function categories(){
return $this->belongsToMany(Category::class);
}
public function transactions(){
return $this->hasMany(Transaction::class);
}
}
offenbar, die erzeugte Abfrage die Erbschaft nicht in Betracht zieht. Ich versuchte $seller = Seller::has('products')->get()->random();
in $seller = User::has('products')->get()->random();
ändern, aber dann wird die Linie 'product_id' => $seller->products->random()->id
einen Fehler verursacht, da die products()
Methode in seller
Klasse definiert ist Was ist der beste Weg, dies zu tun?
Ist es ein richtiger Weg, Benutzerklasse zu erweitern?
Ich habe nach Möglichkeiten gesucht, die User
Klasse zu erweitern. Ich habe diese Frage gefunden: Model Inheritance in Laravel hat mir zwar nicht geholfen.
Ich verwende Laravel 5.4.36, PHP 7.1.11
Wenn nicht anders angegeben, verwendet Eloquent den Klassennamen schlangenverkleidet und Plural als Tabellenname. https://laravel.com/docs/5.5/eloquent#eloquent-model-conventions – lagbox
Fügen Sie 'protected $ table =' users '; 'in Ihrer' Seller' Klasse hinzu. – Marwelln
@Marwelln Danke ,, der oben erwähnte Fehler ist jetzt weg, aber ich bekomme diesen Fehler jetzt 'Call to undefined Methode Illuminate \ Database \ Query \ Builder :: random()' Nicht sicher, welche 'random' es referenziert –