在laravel中按id更新透视表
$id是帐户的id $this->user是经过身份验证的用户 我想通过属于用户auth的帐户id(我的意思是帐户id)更新收受赌注者的帐户。因为用户身份验证具有多个具有相同收受赌注者但不同帐户名的条目。在laravel中按id更新透视表,laravel,pivot-table,updatemodel,Laravel,Pivot Table,Updatemodel,$id是帐户的id $this->user是经过身份验证的用户 我想通过属于用户auth的帐户id(我的意思是帐户id)更新收受赌注者的帐户。因为用户身份验证具有多个具有相同收受赌注者但不同帐户名的条目。 它说“尝试获取非对象的属性”。总结一下下面的问题,它不是一种非常常见的数据库设计。这也意味着,改变这种状况可能是个好主意。通过将bookmaker\u userpivot表转换为具有自己模型类的完整表。原因如下: 属于同一用户和收受赌注者的多条记录(多对多只能有一条) 数据透视表中存储的其他
它说“尝试获取非对象的属性”。总结一下下面的问题,它不是一种非常常见的数据库设计。这也意味着,改变这种状况可能是个好主意。通过将
bookmaker\u user
pivot表转换为具有自己模型类的完整表。原因如下:
- 属于同一用户和收受赌注者的多条记录(多对多只能有一条)
- 数据透视表中存储的其他数据(正常情况下,它会添加到第一个点)
- 更容易处理更改(例如更改帐户的收受赌注者)
这似乎是某种bug或意外行为。不过,一种解决方法是使用查询生成器。
在我看来,这件案子更优雅
bookmaker table
id
name
bookmaker_user table
id
account_name
bookmaker_id
user_id
user table
id
name
User Model :
public function bookmakers(){
return $this->belongsToMany('Bookmaker', 'bookmaker_user', 'user_id', 'bookmaker_id')
->withPivot('id', 'accountname')->withTimestamps();
}
BookmakerController.php
public function update($id)
{
$bookname = Input::get('booknamemodifselect');
$accountname = Input::get('accountnamemodifinput');
$bankrollinvested = Input::get('bankrollinvestedmodifinput');
$bonus = Input::get('bonusmodifinput');
$bankrollamount = Input::get('bankrollamountmodifinput');
$bookmodif = DB::table('bookmakers')->where('name', $bookname)->first();
$bookmaker = $this->user->bookmakers()->where('bookmaker_user.id','=',$id)->first();
$bookmaker->pivot->bookmaker_id = $bookmodif->id;
$bookmaker->pivot->save();
}
我一直在处理这件事。你可以做:
$bookmodif = DB::table('bookmakers')->where('name', $bookname)->first();
if($bookmodif !== null){ // just to make sure the bookmaker exists
DB::table('bookmaker_user')
->where('id', $id)
->update(array('bookmaker_id' => $bookmodif->id);
}
您在哪一行获得“尝试获取非对象的属性”错误?$bookmaker->pivot->bookmaker\u id=$bookmodif->id;你能检查一下它是否真的找到了收受赌注的人吗?我假设
$bookmodif
为空?它确实找到了一个收受赌注者,但现在当我更改某些内容时,它显示“试图获取非对象的属性”。。。奇怪的是,这并不是你的问题,但是你不认为博彩用户表不仅仅是一个透视表吗。我认为它应该有自己的模式(Account
)也许。您是说表中有多条记录具有相同的用户id和收受赌注者id。通常情况下,多对多关系不应如此。谢谢您的回答!我不能投赞成票,我没有15个名声,有人能投赞成票吗!“多对多应该只有一个”。。。“多对多”的哪个部分表示“一”?
$user = $this->user->bookmakers()->having('pivot_id', $myPivotId)->first();
echo $user->pivot->bookmaker_id; // bookmaker_id of the pivot row with id $myPivotId