调用未定义的方法Gallery :: newQuery()Laravel

时间:2015-06-15 15:25:37

标签: php mysql laravel foreign-keys eloquent

我有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();
  1. 我使用迁移创建了Gallery表和外键。为什么我必须在模型之间创建关系,这些关系是在数据库中定义的? (le noob question)
  2. 2.阅读了很多关于这可能是什么原因并且它没有命名空间。 被困在这3天了,任何帮助都非常感谢。 我认为这与我的模特关系有关。

    ===============================更新=============== ==========

    好的,所以我做了$ gallery = new Gallery;在我的PageController中,这似乎很有用 但现在我得到了这个时髦的错误:

    SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(spaggogallery,CONSTRAINT gallery_product_id_foreign FOREIGN KEY({{ 1}})REFERENCES product_idproducts)ON DELETE CASCADE ON UPDATE CASCADE)(SQL:插入idgallerypage_id,{{1 })值(6,2015-06-21 15:24:51,2015-06-21 15:24:51))

2 个答案:

答案 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错误。