在雄辩的外部laravel中与m:m关系一起工作

时间:2014-11-06 12:59:15

标签: laravel-4

我已经能够在雄辩的外部laravel中设置m:m关系并检索记录但我不知道如何添加新记录,因为你没有在代码中创建数据透视表。

如果这些是我的课程,我如何在作者和出版商之间的M:M关系中添加新实例?

<?php

include 'eloquent_database.php';
class Publisher extends Illuminate\Database\Eloquent\Model {
    public $timestamps = false;
    protected $table = 'publisher';
        protected $primaryKey = 'publisher_id';

       public function authors (){
           return $this->belongsToMany('Author', 'author_publisher', 'publisher_id', 'author_id');
       }
}  

class Book extends Illuminate\Database\Eloquent\Model {
    public $timestamps = false;
    protected $table = 'book';
        protected $primaryKey = 'book_id';

       public function author() {
           //related table name, pk in current table, 
           return $this->belongsTo('Author',  'author_id');
       }
}  
// Create the company model
class Author extends Illuminate\Database\Eloquent\Model {
    public $timestamps = false;
    protected $table = 'author';
    protected $primaryKey = 'author_id';

    public function books()
    {
        //related table, fk IN related table, 
        return $this->hasMany('Book', 'author_id');
    }

 public function publishers (){
           return $this->belongsToMany('Publisher', 'author_publisher',  'author_id', 'publisher_id');
       }

}

我也需要知道如何删除一个。我已经看过这个文档http://laravel.com/docs/4.2/eloquent#working-with-pivot-tables,但我真的不遵循它

我真的知道如何添加和删除新实例的例子。还有onine那里有很多不同的版本很难找到哪些文档可以遵循我的代码,但我没有从文档中得到它 - 只是试验和错误

提前多多感谢

编辑:

在对Rays评论的回复中,我在数据库中有一个名为author_publisher的数据透视表,其中包含作者ID和发布者ID,但我不知道如何使用此数据透视表。我必须为它创建一个类吗?我真的不明白

以下是上述代码中对该表的引用  返回$ this-&gt; belongsToMany('作者','author_publisher','publisher_id','author_id');

1 个答案:

答案 0 :(得分:0)

  1. 当建立M:M关系时,请确保您有一个表格,用于翻译作者和出版商之间的关系。示例表可以由包括author_id和publisher_id的条目组成。根据你提供的内容,你缺少这样一张桌子。

  2. 如果您没有这样的表,还有另一种情况。为了使这种M:M关系起作用,为简单起见,作者表必须包含一个名为“publisher_id”的列。同样,发布者表必须包含名为“author_id”的列。然后在作者模型中,返回$ this-&gt; hasMany('Publisher','author_id'),并在发布商模型中,返回$ this-&gt; hasMany('Author','publisher_id')。你应该得到正确的答案。