我的桌子没有'primary ID'
,例如。
| user_id | point_id | created_at | updated_at |
+ ---------- + ---------- + --------------- + -------- ------- +
我有记录:
1 ..| 200 | (date) | (date)
14 | 300 | (date) | (date)
1 ..| 200 | (date) | (date)
现在我想只删除一条记录:
1 ..| 200 | (date) | (date)
14 | 300 | (date) | (date)
I tryied:
UserPoint::where( 'point_id', $reqId )->where( 'user_id', $userId )->first()->delete();
但它总是用这个参数删除所有记录......任何人都可以提供帮助吗? 编辑:我的用户点模型
use Illuminate\Database\Eloquent\Model;
class UserPoint extends Model {
protected $table = 'point_user';
public function scopeUsed($query){
return $query->where('amount', '<', 0);
}
public function scopeEarned($query){
return $query->where('amount', '>', 0);
}
public function about(){
return $this->hasOne('\App\Point', 'id', 'point_id');
}
}
答案 0 :(得分:0)
您尝试实现此删除的方式有些错误,因为它不遵循数据完整性规则。在您的情况下删除子表会强加我们所谓的孤立表。
在这种情况下,删除该记录的正确方法是先将此表与其父相关表关联起来,如下所示:
Class User extends Model {
public function points() {
return $this->hasMany(UserPoint::class)
}
}
然后在UserPoint类或模型中,您需要映射关系。
class UserPoint extends Model {
protected $table = 'point_user';
// I have added this part
public function users() {
return $this->belongsTo(User::class)
}
public function scopeUsed($query){
return $query->where('amount', '<', 0);
}
public function scopeEarned($query){
return $query->where('amount', '>', 0);
}
public function about(){
return $this->hasOne('\App\Point', 'id', 'point_id');
}
}
这样,您在删除模型或项目时只需执行以下操作: //将您的User注入构造函数或函数中-假设您将其命名为User $ user
$user->points->delete();
我建议您在以这种方式处理关系时也要查看Eloquent的关联和同步方法,因为您始终知道相关模型处于同步状态,并且数据库中没有孤儿,这在企业设计中是一个巨大的问题,因为准确性和数据完整性就是一切。