如何使用外键解决One to One关系问题

时间:2014-01-10 00:21:02

标签: laravel laravel-4 eloquent

我一直在模特中使用雄辩。我有以下两张表:

Singlecard
  ->id
  ->card_id

Card
  ->id
  ->card_id

我的Singlecard模型具有以下功能:

public function info()
{
    return $this->hasOne('Card', 'card_id', 'card_id');
}

我用它来获取卡片(我的测试中只有一张牌在卡片中)。

$cards = Singlecard::where('deck_id', '=', $deck)->get();

foreach ($cards as $card) 
{
    $cards_array[] = $card;
}

它有正确的卡并使用var_dump我验证了。但是,问题出在这里:

<div class="row singlecard">
    <a class="" href="{{ $single->id }}">
        <div class="large-2 columns">
            <img src="{{ $single->info->card_image }}">
        </div>

        <div class="large-10 columns">

            <div class="row">
                <div class="large-12 columns">
                    <p>{{ $single->info->name }}</p>
                </div>
            </div>

            <div class="row">
                <div class="large-12 columns">
                @foreach ($single->attributes as $attribute)
                    <p>{{ $attribute->alias }}</p>
                @endforeach
                </div>
            </div>

        </div>
    </a>
</div>

这是扭曲:属性代码工作正常。它从我定义的一对多关系中抓取了正确的属性。但它从卡表中抓取了错误的信息。即使我定义了要匹配的键,它也会根据单个ID和Cards表中的card_id进行匹配。

我尝试删除密钥,但没有做任何事情。我甚至一起删除了这个函数只是为了验证那是被调用的函数。我不确定是什么问题?

更新

我明白了,我做了两件事。一,我使用卡表中的id作为与Singlecards匹配的记录。我也改变了我在Singlecards模型中的功能:

public function info()
{
    return $this->belongsTo('Card', 'card_id');
}

这使我能够正确地查询关系。

1 个答案:

答案 0 :(得分:0)

我需要更新模型的相关性,并更好地形成关系。我还需要更改模型,以便Singlecards属于卡片。我认为它应该是相反的。

卡包含有关各种卡片的所有信息,而Singlecards是每个人手/牌中的内容。我认为这会使Singlecards成为父母,但这是一个错误。一旦我将模型中的函数更改为:

public function info()
{
    return $this->belongsTo('Card', 'card_id');
}

然后它奏效了。