关系,获取关系表属于用户的产品

时间:2017-10-05 23:53:12

标签: php laravel laravel-5 eloquent

所以我有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');    
}

我的两个模型是PurchasesProducts,如果没有原始查询,我如何才能购买属于user_id的产品?

3 个答案:

答案 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')