2016-04-28 2 views
1

Я пытаюсь сделать отношения один-много, используя laravel 5.1. Проблема в том, что когда я создаю новый продукт, он не принадлежит ни одному пользователю в моей базе данных. У меня есть две таблицы в моей базе данных: продукты и пользователи. Одна из строк в моей таблице продуктов - user_id.Laravel 5.1 создать продукт, связанный с user_id

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


public function store(Request $request) 
{ 
    $inputs = $request->all(); 
    $product = Product::Create($inputs); 
    return redirect()->action('[email protected]'); 
} 

Это код в моем 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'); 
    } 
} 

Я понятия не имею, как это сделать, что бы я ни старался. Если я забыл добавить что-нибудь выше, расскажи мне. Спасибо

+0

Я объясню все. позвольте мне написать свой ответ. – imrealashu

+0

ok man thank you – provolkata

ответ

3

Для отношений друг к другу или любых отношений вам необходимо иметь правильную структуру базы данных. Например, в вашем случае у вас есть два стола products и users

Позволяет просто создать миграции для таблиц products и users

миграции

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('users') 
      ->on('id') 
      ->onDelete('cascade'); 
}); 

Теперь у вас есть users стол и ваш products стол. И между вашими таблицами существует связь между пользователями, которые могут иметь продукты.

Модели

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

Теперь, если вы хотите получить доступ к products который принадлежит users вам придется сделать это в вашем контроллере.

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

Это даст вам подробную информацию о пользователе и вместе с продуктами, которые связаны с этим конкретным пользователем.

ПРИМЕЧАНИЕ: В вашем случае у вас нет user_id, связанного с вашими деталями продукта, в этом случае он не будет работать, так как должны быть какие-то отношения.

для хранения данных в базу данных

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


public function store(Request $request) 
{ 

    $inputs = $request->all(); 

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

    return redirect()->action('Pro[email protected]'); 

} 

Теперь вы массу присваивающих значение в базу данных, так $request->all() должен user_id от зарегистрированного пользователя.
Итак, создайте скрытое поле в области формы products.create.

<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() содержит информацию о зарегистрированных пользователях;

Кроме того, в вашем контроллере вы можете сделать, как это тоже ..

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('[email protected]'); 

    } 

Надеется, что это поможет. :)

+0

спасибо, но я не смог заставить его работать. То, что я пытаюсь сделать, - это когда я создаю продукт, который автоматически назначается зарегистрированному пользователю. Я не знаю, говорим ли мы об одном и том же здесь. – provolkata

+0

Хорошо, я обновлю свой ответ – imrealashu

+0

хорошо сделанный imrealashu, но проверьте функцию магазина! вы добавляете запрос на ввод переменных, а затем добавляете запрос Auth :: user() -> id? Я думаю, вам нужно изменить порядок –