我对拉雷维尔有点陌生,希望有人能给我一些帮助。
我为我的英语道歉
因此,我正在尝试与一些朋友开发一个应用程序,以便在强制日期临近时发送警报来管理我们的食物。
我正在开发api,实际结构是这样的:
一个用户,
一种产品,
一个包含用户id,产品id,当然还有强制日期的篮子。
所以现在,当我调用在我的api上获取用户“stock”时,我希望可以得到如下结果:
{
'id' : 1,
'peremption_date': XX-XX-XX,
'product' : {
'id' : 3,
'name': bblablabala,
'brand' : blablabala
},
'id' : 2,
'peremption_date': XX-XX-XX,
'product' : {
'id' : 4,
'name': bblablabala,
'brand' : blablabala
},
}
所以我查看了一下资源,发现如果我定义了正确的关系,这可以为我的输出做一些事情。
我将链接我的实际类声明及其资源:
用户:
//user.php
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
public function baskets()
{
return $this->hasMany(Basket::class);
}
}
产品:
//Product.php
class Product extends Model
{
protected $table = 'products';
protected $fillable = ['code_barre', 'product_name', 'generic_name', 'brand', 'quantity'];
public function basket()
{
return $this->belongsToMany(Basket::class);
}
}
//productResource.php
class ProductResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'code_barre' => $this->code_barre,
'product_name' => $this->product_name,
'generic_name' => $this->generic_name,
'brand' => $this->brand,
'quantity' => $this->quantity,
'created_at' => (string) $this->created_at,
'updated_at' => (string) $this->updated_at,
];
}
}
篮子:
//Basket.php
class Basket extends Model
{
protected $table = 'baskets';
protected $fillable = ['user_id', 'product_id', 'dlc_date'];
public function user()
{
return $this->belongsTo(User::class);
}
public function product()
{
return $this->hasOne(Product::class);
}
}
//BasketResource.php
class BasketResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'dlc_date' => (string) $this->dlc_date,
'created_at' => (string) $this->created_at,
'updated_at' => (string) $this->updated_at,
'product' => $this->product
];
}
}
因此,当我尝试在我的存储方法中存储新的篮子时:
//BasketController.php
public function store(Request $request)
{
$this->product->storeProduct($request->input('code_barre'));
$att = DB::table('products')
->where('code_barre', '=', $request->input('code_barre'))
->first();
$basket = Basket::create([
'user_id' => $request->user()->id,
'product_id' => $att->id,
'dlc_date' => $request->input('dlc_date')
]);
return new BasketResource($basket);
}
我得到以下错误(这个)
说比产品。id戡篮不存在和它的权利,它不应该存在。这是一个有产品标识的篮子。所以我知道这是来自我声明的关系,但我不知道如何做对。
有人能来救我吗???
非常感谢,希望你能理解我!祝你今天愉快
1条答案
按热度按时间ryevplcw1#
当我看着你
Basket
模特儿,看来你得换个发型了:收件人:
因为你有
product_id
在你的baskets
table。使用hasOne()
关系,您需要删除product_id
从baskets
表和添加basket_id
至products
table,因为hasOne()
关系就像hasMany()
,仅呼叫->first()
而不是->get()