通过关系不起作用

时间:2014-04-01 13:50:05

标签: php laravel relationship eloquent

我正在使用laravel创建一个消息传递应用程序。我使用了四次迁移(用户,对话,会话成员和对话)。我还定义了模型之间的关系。

用户的详细信息将存储在users表中。对话ID将存储在对话表中。每次谈话都会有成员。成员的详细信息将存储在conversationsmember表中,最后回复将存储在conversationsreply表中。

现在我试图显示特定用户的所有对话(我在User和ConversationMembers模型之间使用了hasManyThrough关系),但它不起作用。

以下是详细信息:

用户迁移:

$table->increments('id');

$table->string('name', 32);
$table->string('username', 32);
$table->string('email', 320);
$table->string('password', 64);

$table->timestamps();

对话迁移:

$table->increments('id');
$table->timestamps();

conversationsmembers migration:

$table->increments('id');

$table->integer('conversation_id');
$table->integer('user_id'); 

$table->timestamps();

conversationsreply migrations

$table->increments('id');

$table->integer('conversation_id');
$table->integer('user_id'); 

$table->timestamps();

用户模型:  我已将这些方法添加到默认用户模型

public function conversations()
    {
        return $this->hasManyThrough('Conversation', 'ConversationsMember', 'conversation_id', 'id');
    }

    public function conversationsMember(){
        return $this->hasMany('ConversationsMember', 'user_id', 'id');
    }


    public function conversationsReply(){
        return $this->hasMany('ConversationsReply', 'user_id', 'id');
    }

会话模型

class Conversation extends Eloquent{


    public function conversationsMember(){
        return $this->hasMany('ConversationsMember', 'conversation_id', 'id');
    }
    public function conversationsReply(){
        return $this->hasMany('ConversationReply');
    }
}

ConversationsMember模型

    class ConversationsMember extends Eloquent{

        protected $fillable = array('conversation_id', 'user_id');

        protected $table = 'conversationsmember';

        public function users(){
            return $this->belongsTo('User', 'user_id', 'id');
        }

        public function conversations(){
            return $this->belongsTo('Conversation', 'conversation_id', 'id');
        }

}

ConversationsReply Model

class ConversationsReply extends Eloquent{

    protected $fillable = array('reply', 'user_id','conversation_id', 'ip');

    protected $table = 'conversationsreply';

    public function users(){
        return $this->belongsTo('User', 'user_id', 'id');
    }

    public function conversations(){
        return $this->belongsTo('Conversation', 'conversation_id', 'id');
    }
}

1 个答案:

答案 0 :(得分:0)

我可能在这里错了,但是根据你所写的内容,你可以用更简单的方式编写代码。

我建议您考虑使用ConversationMembers作为用户和对话之间的数据透视表,定义多对多关系。您可以找到您要查找的所有信息here