4

このシード データを使用して、次のスキーマとモデルのセットアップがあります。

私の目標は、三者関係を実現することです。これは間違った用語かもしれませんが、最終的にはそう呼んでいます。

次のような 3 方向:

  • チェックにはトークンが添付されています
  • アタッチされたトークンには、Cheque->Token アタッチメントを認識する値がアタッチされています。

Token問題は、 からへの関係Valueにあります。ここで、 をロードするとValues、関連付けられていることを考慮せず、 にCheque属するすべての値が返されますToken

この 3 方向の関係に対してスキーマが正しいかどうかはわかりませんValue。したがって、Valueモデルの関係が属しCheque、正しいかどうかも疑問Tokenです。

これは私が現在モデルをリクエストしている方法です (セットアップからの抜粋):

Route::get('test', function()
{
    $cheque = Cheq_Node::with(array('tokens' => function($query) {
        $query->where_sortable(1);
    }, 'tokens.values'))->first();

    dd( $cheques );
});

私はToken以下を参照して値を変更しようとしました:

public function values()
{
    return $this->has_many('Cheq_Value', 'token_id')->where_node_id($this->pivot->id);
}

しかし、それは私を生み出しました:

Trying to get property of non-object

戻り値の前にa を追加すると、Log::dump( dump($this) )ロードされたモデルが表示されず、空のEloquentモデルのみが表示されます:

object(Cheq_Token)[63]
  public 'attributes' => 
    array (size=0)
      empty
  public 'original' => 
    array (size=0)
      empty
  public 'relationships' => 
    array (size=0)
      empty
  public 'exists' => boolean false
  public 'includes' => 
    array (size=1)
      'values' => null

そこでエラーが発生するのも不思議ではありません。

どうすればこの三者関係を実現できるでしょうか?

4

2 に答える 2

0

正しいデータを取得するには、適切な外部キーを使用して、データベース スキーマを確認する必要があると思います。望む結果が得られると仮定することが常に最良の方法であるとは限りません。

データベースで結合を使用するとうまくいきます...

于 2013-04-05T20:53:33.477 に答える
0

結局、別のSchemaと別のモデルを使用しました。

また、挿入には別のパスを使用する必要があったため、次のテスト シードが生成されました。

すべてを取得するには:

$nodes = Node::with(array('tokenlinks', 'tokenlinks.token', 'tokenlinks.values'))->get();
于 2013-04-05T20:58:35.340 に答える