0

私はmvcフレームワークを扱うのが初めてです。私は現在Laravelを学んでいて、行き詰まっています。2 人のユーザーが友達かどうかをモデルで確認する必要があります。

次のデータベースがあります。

   CREATE TABLE `users` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `firstname` varchar(30) NOT NULL,
     PRIMARY KEY (`id`)
   );

   INSERT INTO `users` (`id`, `firstname`) VALUES
   (1, 'name1'),
   (2, 'name2'),
   (3, 'name3'),
   (4, 'name4');

   CREATE TABLE `friends` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `user_id_from` int(10) unsigned NOT NULL,
     `user_id_to` int(10) unsigned NOT NULL,
     `status` enum('pending','accepted','blocked') NOT NULL,
     PRIMARY KEY (`id`),
     KEY `user_id_from` (`user_id_from`),
     KEY `user_id_to` (`user_id_to`)
   );

   INSERT INTO `friends` (`id`, `user_id_from`, `user_id_to`, `status`) VALUES
   (1, 1, 3, 'accepted'),
   (2, 1, 2, 'pending'),
   (3, 4, 1, 'pending'),
   (4, 4, 2, 'pending'),
   (5, 3, 4, 'accepted');

そして、私のモデルの友人は次のようになります。

    class Friend extends Eloquent 
    {
    public $user_id;
    public $user_id_from;
    public $friends;
    public $friend_user_id;

    public function check_friend($user_id, $friend_user_id){

    $this->user_id = $user_id;
    $this->friend_user_id = $friend_user_id;
    $this->friends =  DB::select('
            SELECT
                fu.id AS `friend_uid`
            FROM
                `users` AS `us`
            LEFT JOIN
                `friends` AS `fr`
            ON
                (fr.user_id_from = us.id OR fr.user_id_to = us.id)
            LEFT JOIN
                `users` AS `fu`
            ON
                (fu.id = fr.user_id_from OR fu.id = fr.user_id_to)
            WHERE
                fu.id != us.id
            AND
                fr.status = "accepted"
            AND
                us.id = ?', array($this->user_id));
    return in_array($this->friend_user_id, $q);
}
}

コントローラ:

    public function get_checkfriend(){
    $friend = new Friend;
    return $friend->check_friend(1,2);
}

次のエラーが表示されます: in_array() は、パラメーター 2 が配列であり、オブジェクトが指定されていることを期待しています。2 番目のパラメーター (クエリの結果である必要があります) を var ダンプしましたが、中にはまったく異なるものがあります (データベースからのデータではありません)。

問題は、私が何を間違っているのかわからないことです。助けてください

4

1 に答える 1

1

まず第一に、Laravel を使用しているため、組み込みのデータベース機能を使用する必要があります。スキーマ ビルダーを使用してデータベースを生成します: http://laravel.com/docs/schema

次に、Eloquent の組み込みのデータベース リレーションシップ機能を利用します: http://laravel.com/docs/eloquent#many-to-many

あなたのケースの簡単な例は次のようなものです(私は思う):

// app/models/user.php
class User extends Eloquent
{
    public function friends() {
        return $this->belongsToMany('User', 'friends', 'user_id', 'friend_id');
    }
}

// app/database/schema/user.php
Schema::create('users', function($table)
{
    $table->increments('id');
    $table->string('name');
    // and any other stuff you want in your user database
});

// app/database/schema/friend.php
Schema::create('friends', function($table)
{
    $table->increments('id');
    $table->integer('user_id');
    $table->integer('friend_id');
});
于 2013-06-16T11:33:56.867 に答える