gpt4 book ai didi

php - Laravel 5.1 创建链接到 user_id 的产品

转载 作者:行者123 更新时间:2023-11-29 04:37:54 25 4
gpt4 key购买 nike

我正在尝试使用 laravel 5.1 建立一对多关系。问题是,当我创建一个新产品时,它不属于我数据库中的任何用户。我的数据库中有 2 个表:产品和用户。我的产品表中的一行是 user_id。

public function create()
{
return view('products.create');
}


public function store(Request $request)
{
$inputs = $request->all();
$product = Product::Create($inputs);
return redirect()->action('ProductController@index');
}

这是我的 ProductController 中的代码。这是我模型中的代码。

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $fillable = [
'name',
'price',
'descr',
'image',
'sale',
'user_id'
];
public $timestamps = false;
protected $table = 'products';
public function books(){
return $this->hasMany('App\Books');
}
}

无论我尝试什么,我都不知道该怎么做。如果我忘记添加上面的任何内容,请告诉我。谢谢

最佳答案

对于一对多关系或任何关系,您需要具有正确的数据库结构。例如,在您的情况下,您有两个表 productsusers

让我们为您的表 productsusers 创建迁移

迁移

Schema::create('users',function(Blueprint $table){
$table->increaments('id');
$table->string('name');
//and so on ...
});

所以基本上是为了识别您有 users.id 列的用户。

Schema::create('products',function(Blueprint $table){
$table->increaments('id');
$table->string('product_name');
$table->integer('user_id')->unsigned();
//and so on ...

$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
});

现在您有了users 表和products 表。并且您的表之间存在关系,即用户可以拥有产品。

模型

class User extends Model {
public function products(){
return $this->hasMany('\App\Product'); //Product Model Name
}
}

现在,如果您想访问属于用户产品,您必须在您的 Controller 中执行此操作。

$user = Users::find(1); //lets say for test we just took firs user
return $user->products()->get();

这将为您提供用户详细信息以及与该特定用户关联的产品的干净 json。

注意:在您的情况下,您没有任何与产品详细信息相关联的 user_id,在这种情况下,它不会起作用,因为应该存在某种关系。

用于将数据存入数据库

public function create()
{
return view('products.create');
}


public function store(Request $request)
{

$inputs = $request->all();

$product = Product::Create($inputs);

return redirect()->action('ProductController@index');

}

现在您正在将值批量分配到数据库中,因此 $request->all() 必须具有登录用户的 user_id
所以在products.create View 的表单区域创建一个隐藏字段。

<form action="someaction" method="POST">
<input type="hidden" name="user_id" value="{{Auth::user()->id}}"/>
<input type="text" name="product_name" />
</form>

现在您的 $request->all() 方法将包含键 user_id 及其值形式的已登录用户。

Auth::user() 给出登录用户的信息;

或者在你的 Controller 中你也可以这样做..

    public function store(Request $request)   
{
$request->user_id = Auth::user()->id; //assigning user_id value to the current logged in user's id (this has to be before adding the request to the inputs variable so when you execute ::Create($inputs) it will be there)
$inputs = $request->all();

$product = Product::Create($inputs);

return redirect()->action('ProductController@index');

}

希望这会有所帮助。 :)

关于php - Laravel 5.1 创建链接到 user_id 的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36925728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com