Php Laravel口若悬河,有许多关系问题

Php Laravel口若悬河,有许多关系问题,php,laravel,laravel-4,Php,Laravel,Laravel 4,我使用的是Laravel 4.2.8 我有两个雄辩的模型:RapidsPacket和RapidsQuestion。RapidsPacket可以包含任意数量的RapidsQuestion,RapidsQuestion可以包含任意数量的RapidsPacket 以下是我的数据库表: 对于RapidSpack型号: packets - id - name 对于RapidsQuestion模型: rapids - id - question 和透视表: packet_rapid - id

我使用的是Laravel 4.2.8

我有两个雄辩的模型:
RapidsPacket
RapidsQuestion
RapidsPacket
可以包含任意数量的
RapidsQuestion
RapidsQuestion
可以包含任意数量的
RapidsPacket

以下是我的数据库表:

对于RapidSpack型号:

packets
 - id
 - name
对于RapidsQuestion模型:

rapids
 - id
 - question
和透视表:

packet_rapid
 - id
 - packet_id
 - rapid_id
以下是模型的当前框架:

class RapidsPacket extends Eloquent {

    protected $table = 'packets';

    /**
     * Get this packet's questions
     *
     * @return RapidsQuestion
     */     
    public function questions()
    {
        return $this->belongsToMany('RapidsQuestion');
    }

}

我想做的是抓住数据包中的所有问题,例如:

$packet = RapidsPacket::find(2);
$my_questions = $packet->questions()->get();
我还希望能够得到可能属于某个问题的数据包。例如:

$question = RapidsQuestion::find(30);
$my_packets = $question->packets()->get();
如果我尝试上面的任何一行代码和
var_dump()
或者
$my_questions
或者
$my_packets
我会得到一个巨大的对象,其中包含各种Laravel内容,但不包含请求的数据

我尝试过多次将不同的外键和本地键传递给
belongtomany()
函数,但它似乎从未返回任何模型。这让我快发疯了。关于这个问题,我已经在SO和更广泛的网络上阅读了无数的答案,但5个小时后,我仍然没有进一步的答案。请帮忙

更新2:

以下是我的数据库表的内容(v小):

急流

_快速分组_

id: 1
packet_id: 1
rapid_id: 30

id: 2
packet_id: 1
rapid_id: 40

id: 3
packet_id: 1
rapid_id: 50
更新1:

刚刚将RapidPackage更改为
属于属性
,而不是
有许多
,但仍然没有用

使用hasMany()时;这意味着目标与父对象之间存在belongsTo关系

总而言之:

class RapidsPacket extends Eloquent {

    protected $table = 'packets';

    /**
     * Get this packet's questions
     *
     * @return RapidsQuestion
     */     
    public function questions()
    {
        return $this->belongsToMany('RapidsQuestion');
    }

}

使用hasMany()时;这意味着目标与父对象之间存在belongsTo关系

总而言之:

class RapidsPacket extends Eloquent {

    protected $table = 'packets';

    /**
     * Get this packet's questions
     *
     * @return RapidsQuestion
     */     
    public function questions()
    {
        return $this->belongsToMany('RapidsQuestion');
    }

}
我想应该是:

class RapidsQuestion extends Eloquent {

protected $table = 'rapids';

/**
 * Get this question's packets
 *
 * @return RapidsPacket
 */     
public function packets()
{
    return $this->belongsToMany('RapidsPacket', 'packet_rapid', 'rapid_id', 'packet_id');
}

}

我认为您应该将类和表命名为相同的名称,这会使您的代码更容易编写

class Rapid extends Eloquent {

protected $table = 'rapids';

/**
 * Get this question's packets
 *
 * @return RapidsPacket
 */     
public function packets()
{
    return $this->belongsToMany('Packet', 'packet_rapid');
}

}

我想应该是:

class RapidsQuestion extends Eloquent {

protected $table = 'rapids';

/**
 * Get this question's packets
 *
 * @return RapidsPacket
 */     
public function packets()
{
    return $this->belongsToMany('RapidsPacket', 'packet_rapid', 'rapid_id', 'packet_id');
}

}

我认为您应该将类和表命名为相同的名称,这会使您的代码更容易编写

class Rapid extends Eloquent {

protected $table = 'rapids';

/**
 * Get this question's packets
 *
 * @return RapidsPacket
 */     
public function packets()
{
    return $this->belongsToMany('Packet', 'packet_rapid');
}

}


谢谢,但我只是做了那个改变,没什么区别。仍然不起作用-如果我
var_dump()
或者
$my_packets
或者
$my_questions
谢谢,我只是得到了一个巨大的对象,但我只是做了更改,这没有什么区别。仍然不起作用-如果我
var\u dump()
或者
$my\u packets
或者
$my\u questions
var\u dump()
可能没有返回您期望的结果,我就会得到一个巨大的对象。试试LêTrần Tiến Trung的解决方案并尝试
var\u dump($my\u questions->toArray())
var\u dump()
可能不会返回您期望的结果。试试LêTrần Tiến Trung的解决方案,然后尝试
var\u dump($my\u questions->toArray())
谢谢。在你发帖之前,我刚算出来。主要问题是我事后没有调用
get()
。谢谢您花时间帮忙。@Garry您最大的问题是没有提供多对多表的正确id。谢谢。在你发帖之前,我刚算出来。主要问题是我事后没有调用
get()
。谢谢你花时间帮忙。@Garry你最大的问题是没有提供多对多表的正确id。
class Rapid extends Eloquent {

protected $table = 'rapids';

/**
 * Get this question's packets
 *
 * @return RapidsPacket
 */     
public function packets()
{
    return $this->belongsToMany('Packet', 'packet_rapid');
}

}
class Packet extends Eloquent {

protected $table = 'packets';

/**
 * Get this packet's questions
 *
 * @return RapidsQuestion
 */     
public function questions()
{
    return $this->belongsToMany('Rapid', 'packet_rapid');
}

}