在Laravel中使用外键进行查询

时间:2017-05-16 21:16:55

标签: php laravel

我在laravel中混合了一点查询。

我有一份文章清单。我想从本文作者那里获得数据。

关系模型文章

public function author()
{
    return $this->belongsTo('App\Models\Author');
}

关系模型作者

public function articles()
{
    return $this->hasMany('App\Models\Article');
}

我试试这个$author = Author::with('articles')->first();

这个:

$author = Author::whereHas('articles', function ($query){
        $query->where('id', '1');
    });

还有很多人测试过,但我并不了解所有。

我的控制器中的方法:

protected function index()
{


    $articles = Article::published()->paginate(8);

    return view('pages.blog', [
        'articles' => $articles,
    ]);
}

最重要的是,如何在我的foreach中显示正确的信息?

谢谢!

1 个答案:

答案 0 :(得分:0)

要解决此问题,您必须按以下方式定义关系。

文章类定义,基于以下表格结构:

articles {   
   id : integer [primary key],  
   ...,  
   author_id : integer [foreign key]  
}
class Article extends Illuminate\Database\Eloquent\Model {

  protected $table = "articles";      

  // HERE YOUR CLASS CODE

  public function author() {
    return $this->belongsTo("Author", "author_id", "id");
  }
}

作者类定义,基于以下表结构:

authors {   
   id : integer [primary key],  
   ...  
}
class Author extends Illuminate\Database\Eloquent\Model {

  protected $table = "authors";      

  // HERE YOUR CLASS CODE

  public function articles() {
    return $this->hasMany("Article", "author_id", "id");
  }
}

使用方法belongsTohasMany时,最好指明外部密钥和本地密钥的标签。

要在视图中显示信息,您必须遵循以下示例:

@foreach ($articles as $article)
    <p>Id {{ $article->id }}</p>
    ...
@endforeach

了解更多信息:
https://laravel.com/docs/5.4/eloquent-relationships
https://laravel.com/docs/5.4/blade