如何使用Laravel通过外键检索所有记录

6
我将尝试使用Laravel显示与外键ID匹配的所有表记录。然而,我的查询没有将任何记录拉入视图中。 如何查找与传递到函数中的外键ID匹配的所有记录? routes.php:
Route::get('/personas/{idPersona}/quotes', 'QuoteController@index');

QuoteController.php:

public function index($id)
    {
        $quotes = Quote::where('idPersona', $id)->get();
        return View::make('quotes.index')->with('quotes', $quotes);
    }

views/quotes/index.blade.php:

<h2> Quotes </h2>

@foreach($quotes as $quote)

    <li>{{ $quote }}</li>

@endforeach

models/Quote.php

class Quote extends Eloquent {

    public $timestamps = false;

    protected $table = 'quote';

    protected $primaryKey = 'idquote';

}

models/Persona.php

class Persona extends Eloquent {


    public $timestamps = false;

    protected $table = 'persona';

    protected $primaryKey = 'idPersona';


}

I have 2 tables, Persona and Quote, and I am trying to pull all the quotes that match the foreign key idPersona:

CREATE TABLE `mountain`.`persona` (
  `idPersona` INT NOT NULL AUTO_INCREMENT,
  `fName` VARCHAR(45) NULL,
  `lName` VARCHAR(45) NULL,
  `mName` VARCHAR(45) NULL,
  `bio` TEXT NULL,
  `dateBorn` VARCHAR(45) NULL,
  `dateDied` VARCHAR(45) NULL,
  PRIMARY KEY (`idPersona`));

CREATE TABLE `mountain`.`quote` (
  `idquote` INT NOT NULL AUTO_INCREMENT,
  `quoteText` TEXT NOT NULL,
  `quoteSource1` VARCHAR(100) NULL,
  `quoteSource2` VARCHAR(100) NULL,
  `tag1` VARCHAR(45) NULL,
  `tag2` VARCHAR(45) NULL,
  `tag3` VARCHAR(45) NULL,
  `idPersona` INT NULL,
  PRIMARY KEY (`idquote`),
  INDEX `idPersona_idx` (`idPersona` ASC),
  CONSTRAINT `idPersona`
    FOREIGN KEY (`idPersona`)
    REFERENCES `mountain`.`persona` (`idPersona`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);


1
注意:implements UserInterface, RemindableInterfaceuse UserTrait, RemindableTrait;仅适用于User类。 - peter.babic
3个回答

7
如果您正在使用Eloquent,则必须利用其强大的ORM功能。要获取特定用户所属的所有报价,请先声明关系: models/Persona.php
class Persona extends Eloquent {


    public $timestamps = false;

    protected $table = 'persona';

    protected $primaryKey = 'idPersona';

    function quotes() {
        return $this->hasMany('Quote', 'idquote');
    }

}

models/Quote.php

class Quote extends Eloquent {

    public $timestamps = false;

    protected $table = 'quote';

    protected $primaryKey = 'idquote';

    function persona() {
        return $this->belongsTo('Persona', 'idPersona');
    }
}

使用上面定义的关系,您可以轻松地获取所有相关引用的所需 persona

QuoteController.php

public function index($id) {
    $quotes = Persona::with('quotes')->find($id)->quotes;
    return View::make('quotes.index')->with('quotes', $quotes);
}

0

如果您不想使用模型关系,可以简单地使用数据库:查询构建器了解更多详情

尝试这个:


假设我有两个表: 1. reports_has_tests 2. tests。在tests表中,我有我的外键。
 DB::table('reports_has_tests')
        ->join('tests', 'tests.id', '=', 'reports_has_tests.tests_id')
        ->select('tests.*')->where('reports_has_tests.reports_id',$yourID)->get();

同样地,你可以像这样处理模型:

 YourModelName::join('tests', 'tests.id', '=', 'reports_has_tests.tests_id')
            ->select('tests.*')->where('reports_has_tests.reports_id',$yourID)->get();
注意:我添加这个答案只是为了帮助那些不想使用 Laravel 模型关系并且想要直接从表中获取有关单个 ID 的数据的人。为了使用上面的查询,必须在您的迁移/表中拥有关系。

0

使用Eloquent为您的Personas和Quotes Model建立关系可能会有所帮助。

在您的情况下,您可能想要应用“hasMany / belongsTo”关系,如Quote->belongsTo->Personas,而Personas拥有许多引用?

http://laravel.com/docs/eloquent提供了更详细的可能关系概述。


如果他将使用Eloquent,他将使用Quotes或Personas id。但是,如果他将使用Fluent,则可以创建一个查询来使用FK。 - lozadaOmr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,