もうどうしたらいいかわからなくなったので質問します。
外部キー制約のあるデータを、HTML出力しようと思っています。
次のようなテーブル定義です(説明に必要なカラムだけを抜粋しています)
CREATE TABLE categories ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(128) NOT NULL UNIQUE, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; INSERT INTO categories (name) VALUES ('たまご'), ('やさい'), ('おにく') ; CREATE TABLE products ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(128) NOT NULL, category_id int(11) DEFAULT NULL, PRIMARY KEY (id), FOREIGN KEY (category_id) REFERENCES categories(id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; INSERT INTO items (name, category_id) VALUES ('オムライス', 1), ('まぐろ丼', NULL) ;
Model class Model_Products extends \Orm\Model { protected static $_belongs_to = array( 'category' => array( 'model_to' => 'Model_Categories', 'key_from' => 'category_id', 'key_to' => 'id', 'cascade_save' => false, 'cascade_delete' => false, ), ); } class Model_Categories extends \Orm\Model { protected static $_has_many = array( 'products' => array( 'model_to' => 'Model_Products', 'key_from' => 'id', 'key_to' => 'category_id', 'cascade_save' => false, 'cascade_delete' => false, ), ); }
View <h1>今日の料理</h1> <h2>料理名:<php echo $product->name; ?></h2> <h3>料理カテゴリ:<php $product->category_id ? print($product->category->name) : null ?></h3> (出力例) <h1>今日の料理</h1> <h2>料理名:オムライス</h2> <h3>料理カテゴリ:たまご</h3>
category_idが存在するならば、カテゴリ名を出力し、
存在しない(設定値がNULL)ならば、何もしないというような処理です。
ある商品に適切なcategory_idが設定されていれば、期待したカテゴリ名を出力してくれますが、
category_idにNULLが設定されていると、次のエラーが表示されます。
Fatal Error! ErrorException [ Fatal Error ]: Method Fuel\Core\View::__toString() must not throw an exception, caught Error: Unsupported operand types APPPATH/views/template.php @ line 0 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title><?php echo $page_title; ?></title> Backtrace COREPATH/bootstrap.php @ line 71 else { logger(\Fuel::L_ERROR, 'shutdown - ' . $e->getMessage()." in ".$e->getFile()." on ".$e->getLine()); } } return \Errorhandler::shutdown_handler(); }); set_exception_handler(function ($e) { // reset the autoloader Prior Non-Fatal Errors Warning: get_class() expects parameter 1 to be object, null given in COREPATH/classes/security.php @ line 242 foreach ($value as $k => $v) { $value[$k] = static::htmlentities($v, $flags, $encoding, $double_encode); } } elseif ($value instanceof \Iterator or get_class($value) == 'stdClass') // elseif ($value and ($value instanceof \Iterator or get_class($value) == 'stdClass')) { // Add to $already_cleaned variable $already_cleaned[] = $value; Warning: Invalid argument supplied for foreach() in COREPATH/classes/view.php @ line 283 protected function get_data($scope = 'all') { $filter_closures = $this->filter_closures; $clean_it = function ($data, $rules, $auto_filter) use ($filter_closures) { foreach ($data as $key => &$value) { $filter = array_key_exists($key, $rules) ? $rules[$key] : null; $filter = is_null($filter) ? $auto_filter : $filter; if ($filter)
Laravelであれば上のようなコードで普通に期待したことが出来たため、
FuelPHPも同様だと思ったら全然うまくいきませんでした。。
どのようにすれば、この問題を解消できるのでしょうか?
外部キー制約をやめるべきですか? あるいは、NOT NULL制約を設けたらいいのでしょうか。
質問内容がふわふわしてて申し訳ありません。皆様何卒アドバイスをよろしくお願いいたします。
なお、FuelPHP1.8 PHP7です。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。