我有一类Seller是extendslaravel的User模型,如下
namespace App;
class Seller extends User{
public function products(){
return $this->hasMany(Products::class);
}
}
Run Code Online (Sandbox Code Playgroud)
在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
];
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
找不到基本表或视图:1146表'tutorial.sellers'不存在(SQL:从
sellers存在的位置选择*(从。= 。products位置选择* ))sellersidproductsseller_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);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,生成的查询没有考虑继承。我尝试更改$seller = Seller::has('products')->get()->random();为,$seller = User::has('products')->get()->random();
但是'product_id' => $seller->products->random()->id由于该products()方法是在seller类中定义的,因此该行会导致错误,这是最好的方法?
这是扩展User类的正确方法吗?
我一直在寻找扩展User课程的方法。我发现了这个问题:Laravel中的模型继承对
我没有帮助。
我正在使用Laravel 5.4.36,PHP 7.1.11
总结一下:
Class Name如果未在模型上明确声明,Laravel将使用用作表名。这会使Laravel自动假定sellers为查询中的表名。要解决此问题,请将以下内容添加到扩展模型中:
protected $table = 'users'
Run Code Online (Sandbox Code Playgroud)
最后,您尝试->random()在查询生成器实例上使用,但这不是您想要的。您想在集合上使用它。您可以执行以下任一操作:
$seller->products()->get()->random()->id;
Run Code Online (Sandbox Code Playgroud)
上面的代码将执行查询并检索所有产品,然后从返回的集合中获取一个随机物品,然后检索ID。更好(更有效)的方法是让“查询”构建器处理它:
$seller->products->inRandomOrder()->first()->id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |