私は簡単な製品とカテゴリを追加しています。カテゴリには多くの製品があります。これが私のコードです:
カテゴリ テーブルの作成:
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');
ここでの問題は、カテゴリ テーブルにアイテム/データがない場合、製品ページが表示されることですが、もちろん、カテゴリ データがないため、選択ボックスにデータがありません。しかし、Category テーブルにデータを入力すると、製品ページに「おっと、問題が発生したようです」というエラーが表示されます。問題は、Category テーブルのデータを取得していない外部キーにあると思います。私のコードのどこに問題があるのか教えていただけませんか? そしてそれを機能させる方法。
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 条件が強調表示されました。このコードの問題点を教えてください。