我想在两张表之间创建一个雄辩的关系,但我找不到如何继续......
这是我的两个关系模型:
表“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()
{
}
答案 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');
}
请注意,我没有放置任何本地密钥,但这些将是该关系的第三个参数。