【问题标题】:How to call variables in controller Laravel如何在控制器 Laravel 中调用变量
【发布时间】:2019-09-24 11:59:50
【问题描述】:

我正在尝试使用Auth::user()->id; 并将它们与'user_id 下的另一个模型一起发布,这样我就不必手动为用户提供'user_id'

我已经检查并包含了所需的文件,并且我正在从 用户表

中获取用户 "id"
$user_id = Auth::user()->id;
echo $user_id; //this is returning right user "id"

我在调用变量并将其发布到控制器函数中的数据库时遇到问题,任何帮助都可以。

public function store(Request $request)
    {
        $user_id = Auth::user()->id;
        $this->validate($request, [
            'token1' => 'required',
            'token2' => 'required'
        ]);
        $tokens = new Tokens([
            'user_id' => $user_id,
            'token1' => $request->get('token1'),
            'token2' => $request->get('token2')
        ]);
        $tokens->save();
        return view('/home');
    }

用户表中的用户"id"发布到令牌表的"user_id",以便我可以使用模型

收到此错误:

SQLSTATE[23000]:违反完整性约束:19 NOT NULL 约束失败:tokens.user_id(SQL:插入“tokens” ("token1", "token2", "updated_at", "created_at") 值 (asddsadf, sdfasdf, 2019-09-24 11:53:57, 2019-09-24 11:53:57))

我的迁移是:

    $table->bigIncrements('id');
    $table->integer('user_id');
    $table->string('token1');
    $table->string('token2');
    $table->timestamps();

【问题讨论】:

  • 这里有什么问题?你有什么错误吗?
  • 更新线程出错
  • 我认为 user_id 字段在您的模型中不可填写,请查看您的模型和 $fillables 数组
  • 使用Tokens 型号代码更新您的问题。
  • 解决了谢谢:)

标签: php laravel


【解决方案1】:

您应该避免以这种方式填写 user_id。

由于user_id 不是fillable property,因此引发错误。但是处理这个问题的正确方法是使用relationships

所以我认为Tokens 有一个belongsTo 关系,因为它的user_id 外键(无论如何应该是一个unsignedInteger 列)并且在你的模型中你有类似的东西:

public function user() {
  return $this->belongsTo(User::class) 
}

如果您查看offical documentation,您会发现您应该以这种方式更改您的代码:

public function store(Request $request)
    {

        $this->validate($request, [
            'token1' => 'required',
            'token2' => 'required'
        ]);

$tokens = new Tokens([
            // 'user_id' => $user_id, This is useless
            'token1' => $request->get('token1'),
            'token2' => $request->get('token2')
        ]);

        // With this method you're going to set the user_id column
        $token->user()->associate(auth()->user());

        $tokens->save();

        return view('/home');
    }

【讨论】:

  • 是的,感谢我的代码问题出在 model 中,我将其设为可填充属性,现在一切正常。它会用你的方法在 user_id 中填写正确的用户 ID 吗?所以我不需要填写user_id?
  • 是的,看看关系文档...设置具有可填充属性的外键这根本不是一个好习惯。这可能会导致很多问题......特别是如果你用一个不存在的 ID 填充它......这就是为什么你应该使用 Laravel 的关系。此外,使用这种方法,关系在创建时就可以在模型中使用,而不是在创建后执行延迟加载
猜你喜欢
  • 1970-01-01
  • 2014-06-20
  • 2018-01-24
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
相关资源
最近更新 更多