Php Laravel-从没有主键的表中删除单个记录
我有一个表没有Php Laravel-从没有主键的表中删除单个记录,php,mysql,laravel,Php,Mysql,Laravel,我有一个表没有“主ID”,例如 +---------+----------+------------+------------+ | user_id | point_id | created_at | updated_at | +---------+----------+------------+------------+ 我有记录: 1 ..| 200 | (date) | (date) 14 | 300 | (date) | (date) 1 ..| 200 | (date
“主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');
}
}
使用illumb\Database\elount\Model;
类UserPoint扩展模型{
受保护的$table='point_user';
使用的公共函数范围($query){
返回$query->where('amount','',0);
}
关于()的公共功能{
返回$this->hasOne('\App\Point',id',Point\u id');
}
}
您试图实现此删除的方式有些错误,因为它不符合数据完整性规则。在您的情况下,删除子表将强制执行我们称之为孤立表的操作
但是,删除该记录的正确方法是首先将该表与其父级相关表关联,如下所示:
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');
}
在处理关系时,我建议您也看看Eloquent的关联和同步方法。通过这种方式,您始终知道相关模型是同步的,数据库中没有孤立的子对象,这在企业设计中是一个巨大的问题,因为准确性和数据完整性是一切。您试图实现这一点的方式删除有些错误,因为它不遵循数据完整性规则。在您的情况下,删除子表将强制执行我们称之为孤立表的操作 但是,删除该记录的正确方法是首先将该表与其父级相关表关联,如下所示:
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');
}
我建议你在处理关系时也看看Eloquent的关联和同步方法,这样你就知道相关模型是同步的,数据库中没有孤儿,这在企业设计中是一个巨大的问题,因为准确性和数据完整性就是一切。刚刚测试了类似的查询,它按预期工作。仔细检查所有内容,这个查询应该只删除一行。你能给我们看看你的模型吗UserPoint@Carlos我编辑了第一篇文章。@Vertisan我建议您添加一个主键,我四处搜索,许多类似的文章都提出了相同的建议,但还没有找到解决方法。只是测试了类似的查询,它按预期工作。仔细检查所有内容,这个查询应该只删除一行。你能给我们看看你的模型吗UserPoint@Carlos我编辑了第一篇文章。@Vertisan我建议你添加一个主键,我四处搜索,许多类似的文章都建议相同,但还没有找到解决方法