Laravel模型关系

时间:2014-11-16 19:30:10

标签: laravel laravel-4 eloquent

我的模特出了什么问题:

连接表:

  

id,parent_sid,connection_id(可空)

连接步骤

  

id,sid,date_started,date_ended,connection_id

步骤

  

id,name,url

class Step extends Eloquent {
    public function connections() {
        return $this->hasMany("Connection", "parent_sid");
    }
...}


class Connection extends Eloquent {
    public function connectionSteps() {
        return $this->hasMany("ConnectionStep", "connection_id");
    }
...}

class ConnectionStep extends Eloquent {
    public function connection() {
        return $this->belongsTo("Connection", "connection_id");
    }
... }

但是当我跑步时:

Step::find(1)->connections()->connectionSteps();

我总是收到这个错误:

  

异常'BadMethodCallException',消息'调用未定义   方法Illuminate \ Database \ Query \ Builder :: connectionSteps()'

3 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用关系数据获取模型:

$step = Step:with('connections.connectionSteps')->find(1);

现在您可以这样显示数据:

echo $step->name;

foreach ($step->connections as $con) {
  foreach ($con->connectionSteps as $step)  {
     echo $step->date_started;
  }
}

答案 1 :(得分:0)

在示例Step :: find(1) - > connections() - > connectionSteps()中, 你正在寻求访问未定义的步骤的关系connectionSteps。 这就是为什么你得到'调用未定义的方法',因为这是Connections关系。

您可以通过使用将同时加载多个关系的预先加载来实现此目的:

Step::with(array('connections', 'connections.connectionSteps'))->find(1);

Hepe有帮助!

答案 2 :(得分:0)

正确的方式:

Step::find(1)->connections->connectionSteps;

急切加载:

Step::with('connections.connectionSteps')->find(1)->connections->connectionSteps;