所以我有2个表产品和购买,我试图获得属于产品所有者的购买。任何人都可以购买,但只有用户拥有该产品
我的表格是这样的:
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->string('title');
$table->text('description');
$table->string('category');
$table->string('auction_type');
$table->string('allow_offers');
$table->string('condition');
$table->integer('quantity');
$table->integer('auctionlength');
$table->decimal('buyitnow_price');
$table->decimal('auction_price');
$table->string('shipping');
$table->decimal('shipping_cost');
$table->integer('shipping_time');
$table->string('international_shipping');
$table->string('location');
$table->string('allow_returns');
$table->date('enddate');
$table->timestamps();
$table->softDeletes();
});
购买表
Schema::create('purchases', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->integer('product_id');
$table->decimal('amount');
$table->string('name');
$table->string('address');
$table->string('city');
$table->string('state');
$table->string('country');
$table->string('postal');
$table->string('email');
$table->string('status');
$table->timestamps();
$table->softDeletes();
});
我尝试了以下内容,但这似乎仍然有行:
dd(Product::where('user_id', Auth::user()->id)->with('purchases')->get());
购买型号
public function product()
{
return $this->belongsTo('App\Models\Market\Product');
}
产品型号
public function purchases()
{
return $this->hasMany('App\Models\Market\Purchases');
}
我的两个模型是Purchases
和Products
,如果没有原始查询,我如何才能购买属于user_id
的产品?
答案 0 :(得分:1)
您的用户模型必须具有hasMany
关系,至少与Purchases
有关系(因为这里您试图获得该关系),两种模型都是最好的,例如
public function products()
{
return $this->hasMany(Products::class);
}
public function purchases()
{
return $this->hasMany(Purchases::class);
}
要购买,您可以
$user->purchases;
假设$user
已经有User
模型(包含数据),当您将关系称为属性(而非方法)时,您将得到Collection
(因为是{ {1}}关系)。
我正在通过记忆完成所有这些。
因此,您可以访问第一次购买
hasMany
编辑:因此,您试图获得对产品的所有购买。
您必须在$purchases = $user->purchases;
$purchases->first()->name;
模型上定义关系。
因此,您需要访问Products
模型,执行我已完成的关系以获取Products
Purchases
然后,您可以访问该产品上完成的所有购买。
答案 1 :(得分:0)
试试这个伙伴:)
购买模型
public function product()
{
return $this->belongsTo(Product:class ,'product_id', 'id');
}
产品型号
public function purchases()
{
return $this->hasMany(Purchases::class,'id', 'product_id');
}
答案 2 :(得分:-1)
有些建议描述了一种解决方案,我们会在每次购买时获取产品。这可以工作,但我们需要将每个产品的购买量提取到一个集合中:
$purchases = Product::with('purchases')
->where('user_id', $ownerId)
->get()
->pluck('purchases')
->flatten();
这是一种更高效的方法 - 我们可以直接获取特定用户拥有的产品的购买:
$purchases = Purchase::with('product')
->whereHas('product', function ($query) use ($ownerId) {
$query->where('user_id', $ownerId);
})
->get();
如果我们不需要为每次购买使用产品上存储的任何数据,我们就可以从上面的查询中删除with('product')
。