我有3张桌子
产品
页
gallery - 两个外键page_id,product_id
(外键应该一起映射到UNIQUE,为什么?)
<?php
class Gallery extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'gallery';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
public static $rules = array(
// 'email'=>'required|email|unique:users',
// 'password'=>'required|alpha_num|between:6,12|confirmed',
// 'password_confirmation'=>'required|alpha_num|between:6,12'
);
public function pages() {
return $this->belongsTo('Pages', 'page_id');
}
public function products() {
return $this->belongsTo('Products', 'products_id');
}
}
页面模型
<?php
class Pages extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'pages';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
public static $rules = array(
'title'=>'required',
'body'=>'required'
// 'email'=>'required|email|unique:users',
// 'password'=>'required|alpha_num|between:6,12|confirmed',
// 'password_confirmation'=>'required|alpha_num|between:6,12'
);
public function gallery() {
return $this->hasOne('Gallery');
}
}
产品型号
<?php
class Products extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'products';
// public $timestamps = false;
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
public static $rules = array(
'title'=>'required',
'body'=>'required'
// 'email'=>'required|email|unique:users',
// 'password'=>'required|alpha_num|between:6,12|confirmed',
// 'password_confirmation'=>'required|alpha_num|between:6,12'
);
public function gallery()
{
return $this->hasOne('Gallery');
}
}
我在PagesController中执行此操作:
$page = Pages::find($page_id);
$page->gallery throws this error Call to undefined method Gallery::newQuery();
2.阅读了很多关于这可能是什么原因并且它没有命名空间。 被困在这3天了,任何帮助都非常感谢。 我认为这与我的模特关系有关。
===============================更新=============== ==========
好的,所以我做了$ gallery = new Gallery;在我的PageController中,这似乎很有用 但现在我得到了这个时髦的错误:
SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(spaggo
。gallery
,CONSTRAINT gallery_product_id_foreign
FOREIGN KEY({{ 1}})REFERENCES product_id
(products
)ON DELETE CASCADE ON UPDATE CASCADE)(SQL:插入id
(gallery
,page_id
,{{1 })值(6,2015-06-21 15:24:51,2015-06-21 15:24:51))
答案 0 :(得分:1)
首先,你的Laravel版本是什么?它实际上可能是由于命名空间,尽管你的假设。
其次,作为惯例,我建议您将模型命名为单数,例如Product和Page。
回答你的另一个问题:是的,你的数据库可能包含这些关系的约束,但不幸的是,Eloquent ORM无法使用它们。您仍然需要在模型级别定义这些关系。
答案 1 :(得分:0)
对于所有Laravel模型,它不应该是extends Model
(除非它是一些旧的语法),并且必须通过use
语句声明模型:use Illuminate\Database\Eloquent\Model;
。
我亲自了解如果我忘记将Model
父类添加到我的模型中,则会出现Call to undefined method App\SomeClass::newQuery
错误。