首页 > 解决方案 > Laravel 8 多个模型到单一视图错误 $address 未定义

问题描述

我正在尝试使用 findOrNew() 在数据库中创建 2 行,但是当我使用用户模型中的 ID 创建另一个模型(地址)时,程序返回未定义的变量 $address。我不知道我是否使用了正确的方法。您可以在下面查看我的方法。你能引导我找到正确的方法或在哪里找到它吗?

2模型一视图:

在此处输入图像描述

标签: model-view-controllereloquentlaravel-8eloquent-relationship

解决方案


看到你的方法中有什么返回一个未定义的,因为它没有正确执行 findOrNew 方法,检查这个链接,也许它会帮助你这同样

第二个是,如果您通过邮寄方式传递值,那么所有内容都会在 $req 参数中出现,并且只有在您想使用 id 时,如果您正确发送数据,则必须通过 $req->id 访问

第三个我看到在视图方法中你传递了 3 个参数,而你应该只传递两个第一个是视图的名称第二个是你将传递给视图的数据的排列

public function detail(Request $req)
{
    $user = User::firstOrNew($req->id);
    $user->user_type_id = 1;
    $user->name = $req->name;
    $user->last_name = $req->last_name;
    $user->email = $req->email;
    $user->password = Hash::make(Str::random(8));
    $user->save();

    $address = UserAddress::firstOrCreate(['user_id' => $req->id]); //or maybe $user->id

    return view('user.detail', [
        'user' => $user,
        'adderss' => $address
    ]);
}

最后你可能更喜欢使用updateOrCreate方法

public function detailV2(Request $req)
{        
    $user = User::updateOrCreate(
        ['id' => $req->id],
        [
            'user_type_id' => 1,
            'name' => $req->name,
            'last_name' => $req->last_name,
            'email' => $req->email,
            'password' => Hash::make(Str::random(8)),
        ]
    );

    $address = UserAddress::firstOrCreate(['user_id' => $user->id]);

    return view('user.detail', [
        'user' => $user,
        'adderss' => $address
    ]);
}

推荐阅读