8
使用模型的关联删除,主表和从表都引入了软删除标记。操作进行后,只有主表被标记了删除。从表没有任何变化
使用模型的关联删除,主表和从表都引入了软删除标记。操作进行后,只有主表被标记了删除。从表没有任何变化
给出具体代码吧
1.控制器删除代码
$id = $this->id;
if (!$this->request->isAjax()) {
return abort(404, lang('404 denied access'));
}
$info = AdminModel::get($id);
if($info->together('hasOneRole')->delete()){
return json(['code'=>1, 'msg'=> lang('delete success'), 'url'=> url('amember/index')]);
}else{
return json(['code'=>0, 'msg'=>lang('delete failed')]);
}
2.admin模型
<?php
namespace app\admin\model;
use think\Model;
use traits\model\SoftDelete;
class Admin extends Model
{
//引入软删除trait 和 定义软删除字段
use SoftDelete;
protected $deleteTime = 'delete_time';
// 设置完整的数据表(包含前缀)
protected $name = 'admin';
//初始化属性
protected function initialize()
{
}
public function hasOneRole()
{
return $this->hasOne('AuthRoleUser', 'user_id', 'id');
}
}
?>
<?php
/**
* User: harlen
* Date: 2017/2/14 0014 - 17:10
*
*/
namespace app\admin\model;
use think\Model; use traits\model\SoftDelete;
class AuthRoleUser extends Model { use SoftDelete; protected $deleteTime = 'delete_time';
protected $name = 'auth_role_user';
public function authAdmin()
{
return $this->hasOne('Admin','id', 'user_id');
}
}
你的一对一关联定义有问题吧 不可能两个都是hasOne的
together('hasOneRole')
删除这里只引用了这个关联方法。 从表里面的关联方法,是另一个业务逻辑用的。我没从together调用它,如果是因为从表的关联属性才发生这个问题, 那是否 together这方法就已经有BUG了?。
从xdebug单步调试。
softDelete 库,只自动生成了主表的delete_time
/**
* 删除当前的记录
* @access public
* @param bool $force 是否强制删除
* @return integer
*/
public function delete($force = false)
{
if (false === $this->trigger('before_delete', $this)) {
return false;
}
$name = $this->getDeleteTimeField();
if (!$force) {
// 软删除
$this->change[] = $name;
$this->data[$name] = $this->autoWriteTimestamp($name);
$result = $this->isUpdate()->save();
} else {
$result = $this->db(false)->delete($this->data);
}
$this->trigger('after_delete', $this);
return $result;
}
model.php
// 自动关联写入
if (!empty($this->relationWrite)) {
$relation = [];
foreach ($this->relationWrite as $key => $name) {
if (!is_numeric($key)) {
$relation[$key] = [];
foreach ($name as $val) {
if (isset($this->data[$val])) {
$relation[$key][$val] = $this->data[$val];
unset($this->data[$val]);
}
}
} elseif (isset($this->data[$name])) {
$relation[$name] = $this->data[$name];
if (!$this->isUpdate) {
unset($this->data[$name]);
}
}
}
}
这里也并没有生成从表的delete_time的代码 。
@redM0on212 主表关联附表,附表使用belongsTo
与主表联系.逻辑是这样的.是有主次关系的.
http://www.kancloud.cn/manual/thinkphp5/142357
你的逻辑是有问题.你再测试一下试试吧.