laravel4如何在我的控制器中使用eloquent?

时间:2015-09-01 15:28:15

标签: laravel-4 eloquent relationship

我想在两张表之间创建一个雄辩的关系,但我找不到如何继续......

这是我的两个关系模型:

表“etablissement”:

<?php class Etablissement extends Eloquent {
/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'etablissement';

public function annulation()
{
    return $this->hasMany('Annulation');
}}

表“环形”:

<?php class Annulation extends Eloquent {
/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'annulation_remboursement';

public function etablissement ()
{
    return $this->belongsTo('Etablissement');
}}

在“Etablissement”表中,每个etablissement都有一个id(id_etablissement),在“annulation”中有一个id_etablissement的列。我怎样才能在我的控制器中返回一个关系,以便在环境中使用etablissement的名称&gt; id_etablissement:

class AnnulationsController extends \BaseController {

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
public function index()
{

}

2 个答案:

答案 0 :(得分:1)

index方法中应该是这样的:

$annulation = Annulation::find(1);

$annulation->etablissement->name

annulation_remboursement表格应该有一个establissement_id字段。

答案 1 :(得分:0)

错误可能在关系的键中。

https://laravel.com/docs/4.2/eloquent#one-to-one中,我们看到:

  

请注意,Eloquent根据模型名称假定关系的外键。在这种情况下,假设Phone模型使用user_id外键。如果要覆盖此约定,可以将第二个参数传递给hasOne方法。此外,您可以将第三个参数传递给方法,以指定应该用于关联的本地列:

     

返回$ this-&gt; hasOne(&#39;电话&#39;,&#39; foreign_key&#39;);

     

返回$ this-&gt; hasOne(&#39;电话&#39;,&#39; foreign_key&#39;,&#39; local_key&#39;);

     

[...] 一对多:同样,您可以通过将第二个参数传递给hasMany方法来覆盖传统的外键。并且,与hasOne关系一样,也可以指定本地列:

     

返回$ this-&gt; hasMany(&#39;评论&#39;,&#39; foreign_key&#39;);

     

返回$ this-&gt; hasMany(&#39;评论&#39;,&#39; foreign_key&#39;,&#39; local_key&#39;);

* 您还应该在同一页面结帐定义关系的反转

因此,在您的情况下,您有一个名为id_establissement的密钥,但Laravel正在搜索establissement_id。如果您希望覆盖此行为并指定密钥,则应执行以下操作:

protected $table = 'etablissement';
public function annulation()
{
    return $this->hasMany('Annulation','id_establissement');
}

并根据&#34;关系的反转&#34;

protected $table = 'annulation_remboursement';
public function etablissement ()
{
    return $this->belongsTo('Etablissement','id_establissement');
}

请注意,我没有放置任何本地密钥,但这些将是该关系的第三个参数。