Php 拉威尔与信息的关系

Php 拉威尔与信息的关系,php,laravel,eloquent,many-to-many,Php,Laravel,Eloquent,Many To Many,我有products表和countries表,它们假设彼此之间存在多对多关系,但包含关系的附加参数 所以在产品中有产品id,名称 在国家中有国家id、名称 在产品所在国,有国家标识、产品标识、价格 产品型号: namespace App\Models; use Illuminate\Database\Eloquent\Model; class Product extends Model { /** * Get the countries for the product.

我有products表和countries表,它们假设彼此之间存在多对多关系,但包含关系的附加参数

所以在产品中有产品id,名称

在国家中有国家id、名称

在产品所在国,有国家标识、产品标识、价格

产品型号:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class Product extends Model
{
    /**
    * Get the countries for the product.
    */
    public function countries()
    {
        return $this->belongsToMany('Country');
    }

}
国家模式:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class Country extends Model
{
    /**
    * Get the countries for the product.
    */
    public function products()
    {
        return $this->belongsToMany('Product');
    }

}
所以我知道我可以用 ->以“价格”为中心 将其添加到pivot关系中,但我不明白的是,查询产品列表的最佳方法是什么,例如按国家查询,可能我的结构错误,但我希望最终能够获得特定国家的所有产品及其价格

我觉得我需要做很多工作才能按国家为产品定价

Country::find(1)->products->first()->pivot->price

首先将此关系函数更改为Country.php

 public function products()
    {
        return $this->belongsToMany(Product::class,'pivot_table_name','country_id','product_id')->withPivot('price','sku');
    }  
然后尝试这个查询

 $countries = Country::with(['products'])->get();
如果要传递参数,请使用此查询


是的,我的例子很有效,它和你的完全一样,我没有说不,我只是想让它变得更简单、更聪明。所以这就是我说的我知道我能做的,但这不是我想做的。。我的目标是:提供一个产品id和一个国家id->获取带有所有参数的产品..这不仅仅是价格,还有运输、货币、sku等。。。我希望能够将products表与product country表进行内部联接,这样我就可以从products->id、名称、价格、装运等获取信息。。通过国家id.@ShahafAntwarg,可以在关系函数中传递多个列。类似于pivot'column1'、'column2';
 $countries = Country::with([
                'products' => function ($query) use ($productId) {
                    $query->where('id', $productId);
                }
            ])->where('id', $countryId)->first();