Laravel 4.2加入表和分页

时间:2015-07-03 02:47:38

标签: php mysql laravel-4 pagination

我学习 Laravel 4.2 并尝试使用连接表和分页。 使用分页时我的代码工作。但是,当我与联接表结合使用时,它不起作用。

这是我的控制器: 的 BookController.php

public function index()
    {
        // Get All Books
        //$booksList = Book::all();
        $booksList = Book::with('category')->paginate(2);

        return View::make('books.index', compact('booksList'));
    }

我得到这样的错误:

Call to undefined method Illuminate\Database\Query\Builder::category()

我的类别模型就像这样:

<?php 
    class Category extends Eloquent
    {

    }

我的图书模型是这样的:

<?php 
    class Book extends Eloquent
    {
        protected $fillable = array('isbn', 'title', 'author', 'publisher', 'language');
    }

index.blade.php

<tr>
            <td>{{ $book->id }}</td>
            <td>{{ $book->isbn }}</td>
            <td>{{ $book->category_id }}</td>
            <td>{{ $book->title }}</td>
            <td>{{ $book->author }}</td>
            <td>{{ $book->publisher }}</td>
            <td>@if ($book->language == 1) {{ 'English' }} @else {{ 'Indonesian' }} @endif</td>
            <td>
                {{ link_to_route('books.show', 'Read', array($book->id), array('class' => 'btn btn-primary btn-xs')) }}
            </td>
            <td>
                {{ link_to_route('books.edit', 'Edit', array($book->id), array('class'=>'btn btn-warning btn-xs')) }}
            </td>
            <td>
                {{ Form::open(array('method'=>'DELETE', 'route'=>array('books.destroy', $book->id))) }}
                {{ Form::submit('Delete', array('class'=>'btn btn-danger btn-xs', 'onclick' => 'return confirm("Are you sure?")')) }}

                {{ Form::close() }}
            </td>
        </tr>

我的表结构如下: enter image description here

enter image description here

请帮助谢谢。

2 个答案:

答案 0 :(得分:2)

当你在雄辩中使用join时,你必须实现与这样的模型的关系:

<?php 
class Book extends Eloquent
{
    protected $fillable = array('isbn', 'title', 'author', 'publisher', 'language');

     public function category(){
        return $this->belongsTo('Category');
     }

}

<?php 
class Category extends Eloquent
{
    public function book(){
        return $this->hasMany('Category');
     }
}

答案 1 :(得分:1)

with('category')并不代表加入,但急切加载

它实际上会执行加入以急切加载您的数据您必须为模型定义关系,以便laravel了解要做什么。

简而言之,您只能在现有模型关系上使用with()。在您的情况下,您应该按如下方式更改模型:

<强> 分类

class Category extends Eloquent
{
  public function books(){
    return $this->hasMany('Book');
  }
}

<强>

class Book extends Eloquent
{
  protected $fillable = array('isbn', 'title', 'author', 'publisher', 'language');

  public function category(){ 
    return $this->belongsTo('Category');
  }
}

有关Laravel的更多信息Relationships