4

laravel 4 で熱心にロードするときに関係配列を取得する際に問題が発生しています。たとえば、次のようになります。

コントローラ:

         foreach (Apps::with('extra')->get() as $app)
         {
                 print_r($app->toArray());//returns array but my relationship array at the bottom  says null
                echo $app->extra; //this will show my relationship details

        }

モデル:

class Apps extends Eloquent
{
    protected $connection = 'mysql_2';
    protected $table = 'apps';
    public $timestamps = false;
    protected $primaryKey = 'name';


     public function host()
     {
           return $this->belongsTo('Hosts','name');
     }

     public function extra()
     {
            $this->primaryKey='app_ip';
           return $this->hasone('Extra','ip');
     }

  //other functions below.......

}

class Extra extends Eloquent
{
    protected $connection = 'mysql_3';
    protected $table = 'extra';
    public $timestamps = false;
    protected $primaryKey = 'ip';

    public function app(){
            return $this->belongsTo('Apps', 'app_ip');
}

mysql:

私のmysqlテーブルは、以前に存在していたlaravelを介して作成されたものではありません。Apps テーブルの app_ip 列は、extra テーブルの ip 列に関連しています。これは 1 対 1 の関係であり、関係関数で主キーを指定しました。私は関係を取り戻しているので、それが機能していることを知っています.

関数を直接呼び出すと関係データを取得できますが、配列全体を印刷しようとすると関係データが表示されません。主な目標は、関係列とアプリ列の両方を 1 回の応答で返せるようにすることです。

4

2 に答える 2

0

あなたが持っているものは機能し、コレクションを反復するか、 ->load() を使用して熱心にロードしても違いはありません。モデルに目に見える制限を使用していますか? その場合は、関係を含める必要があります。

class Apps extends Eloquent {

    protected $visible = array(
        'id',
        'name',
        'created_at',
        'extra', // Make the relationship 'visible'
    );

    public function extra()
    {
        return $this->hasMany('Extra');
    }

}
于 2013-10-08T04:57:17.297 に答える