Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-从没有主键的表中删除单个记录_Php_Mysql_Laravel - Fatal编程技术网

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我建议你添加一个主键,我四处搜索,许多类似的文章都建议相同,但还没有找到解决方法