【问题标题】:Can't access data from the Users table from a function in controller无法从控制器中的函数访问用户表中的数据
【发布时间】:2021-06-30 03:59:25
【问题描述】:

我正在尝试使用一个函数来软删除数据库中的 2 行,一个来自我创建的名为 persona 的表,另一个来自 laravel 使用 Auth 创建的 users 表,我的用户表有一个与persona 表关联的外键,称为idPersona。我要做的是从persona 表中软删除与id 参数匹配的行,然后软删除users 中属性idPersonaid 参数匹配的行收到的函数。

我要贴出Controller功能代码

控制器功能代码

 public function deleteMedico($id){
        $medico = Persona::findOrFail($id);
        $medico->estado =False;
        $personaID = $medico->id;
        $user= new User();
        $user->where('idPersona',$personaID);
        var_dump($user);
        
    }

我将尝试解释我想用这个控制器做什么,我使用 findOrFail 函数从persona 表中找到我想自我删除的行,在我找到它之后我以这种方式将estado 设置为false 软删除该行。之后我尝试获取一个 User 实例,查找users 表,其中 idPersona 与被软删除的行的 id 匹配。

自我删除的代码与persona 表几乎相同,但问题是我在users 表中找不到行,将发布var_dump 我得到的@987654341 @。

还将发布我的数据库的外观以防万一它有用

我不知道我需要做什么才能获取users 表中idPersona 属性与personas 表中的id 属性匹配的行。我是 Laravel 的新手,如果这个问题是重复的或者没什么难的,我很抱歉。 p

【问题讨论】:

  • 不要创建新的用户实例。做$user = User::where('idPersona',$personaID)->first(); 或者(甚至更好)在PersonaUser 之间建立一个有说服力的关系

标签: php laravel laravel-8


【解决方案1】:

你的语法错误。

// $user = new User();
// $user->where('idPersona',$personaID);
$user = User::where('idPersona', $personaID)->firstOrFail();

这应该可以修复语法,但在您的代码中有更简单的方法可以做到这一点。


路由模型绑定

Route::get('deleteMedico/{persona}', ...);

雄辩的关系

// Persona.php
public function user()
{
    return $this->hasOne(User::class, 'idPersona');
}
public function deleteMedico(Persona $persona)
{
     $persona->fill(['estado' => false])->save();
     $persona->user->fill(['estado' => false])->save();
}

【讨论】:

  • 谢谢,这解决了问题。我之前尝试过使用 get() 方法,但没有成功。也许我之前的逻辑错了,现在我忘了包括它。
  • get() 返回一个集合。 first()/firstOrFail() 返回一个模型。
  • 所以这就是为什么它不能与 get() 一起工作。感谢您的帮助
【解决方案2】:

你忘记了 get 方法。

User::where('idPersona',$personaID)->get();

【讨论】:

  • 感谢您的帮助,但正如 IGP 上面指出的那样,get 方法在这种情况下没有帮助,第一个或失败选项是正确的。
猜你喜欢
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多