Я делаю простые добавления продуктов и категорий. Где категории имеют много продуктов. Вот мой код:
В создании таблицы категорий:
Schema::create('categories', function($table){
$table->increments('id');
$table->string('name');
$table->timestamps();
});
В создании таблицы продуктов:
Schema::create('products', function($table){
$table->increments('id');
$table->integer('category_id')->unsigned();
$table->foreign('category_id')->references('id')->on('categories');
$table->string('title');
$table->timestamps();
});
В контроллере продукта:
public function postCreate(){
$validator = Validator::make(Input::all(), Product::$rules);
if($validator->passes()){
$product = new Product;
$product->category_id = Input::get('category_id');
$product->title = Input::get('title');
$product->save();
return Redirect::to('admin/products/index')
->with('message', 'Product Created');
}
return Redirect::to('admin/product/index')
->with('message', 'Something went wrong')
->withErrors($validator)
->withInput();
}
Тогда в моем index.blade.php
{{ Form::open(array('url'=>'admin/products/create', 'files'=>true)) }}
<p>
{{ Form::label('category_id', 'Category') }}
{{ Form::select('category_id', $categories) }}
</p>
<p>
{{ Form::label('title') }}
{{ Form::text('title') }}
</p>
{{ Form::submit('Create Product', array('class'=>'secondary-cart-btn')) }}
{{ Form::close() }}
По моему маршруту:
Route::controller('admin/categories', 'CategoriesController');
Route::controller('admin/products', 'ProductsController');
Проблема здесь в том, что, если в таблице «Категория» нет элемента / данных, отобразится страница продукта, но, конечно, в моем поле выбора нет данных, поскольку нет данных категории. Но если я добавлю некоторые данные в таблицу «Категория», на странице продукта появится сообщение «К сожалению, что-то пошло не так». Я считаю, что проблема заключается во внешнем ключе, который не получает данные в таблице категорий.
Не могли бы вы, ребята, помочь мне понять, в чем проблема в моем коде? и как заставить это работать.
Вот что появляется после включения отладки в app.php
class ProductsController extends BaseController{
public function __construct() {
$this->beforeFilter('csrf', array('on'=>'post'));
}
public function getIndex(){
$categories = array();
foreach (Category::all() as $category) {
$categories[$category->id] = $categories->name;
}
return View::make('products.index')
ErrorException (E_NOTICE)
Попытка получить свойство необъекта
Состояние Foreach было выделено. Посоветуйте, пожалуйста, что не так с этим кодом.
Задача ещё не решена.
Других решений пока нет …