我有Seller
laravel extends
模型的课程User
如下
namespace App;
class Seller extends User{
public function products(){
return $this->hasMany(Products::class);
}
}
ModelFactory.php
中的我有以下代码
$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
];
});
我收到以下错误
找不到基表或视图:1146表'tutorial.sellers'没有 存在(SQL:select * from
sellers
where exists(select * from。)products
sellers
。id
=products
。seller_id
))
Product
类如下
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);
}
}
显然,生成的查询不会考虑继承。
我尝试将$seller = Seller::has('products')->get()->random();
更改为$seller = User::has('products')->get()->random();
但是由于在'product_id' => $seller->products->random()->id
类中定义了products()
方法,因此行seller
会导致错误
最好的方法是什么?
这是扩展User类的正确方法吗?
我已经搜索了扩展User
类的方法。
我发现了这个问题:Model Inheritance in Laravel
虽然没有帮助我。
我正在使用Laravel 5.4.36,PHP 7.1.11
答案 0 :(得分:4)
总结:
如果未在模型上明确声明,Laravel将使用Using wordApplication As Object = New Microsoft.Office.Interop.Word.Application
End Using
作为表名。这会导致Laravel自动将Class Name
假设为查询中的表名。要解决此问题,请将以下内容添加到扩展模型中:
sellers
最后,您尝试在查询构建器实例上使用protected $table = 'users'
,但这不是您想要的。您想在集合中使用它。您可以执行以下任何操作:
->random()
以上将执行查询并检索所有产品,然后从返回的集合中获取一个随机项,然后检索ID。更好(更有效)的方法是让Query构建器处理它:
$seller->products()->get()->random()->id;