私は3つのテーブルを持っています。
ユーザー-user_id、user_name
follow_album -album_id、follower_user_id
アルバム-album_id、album_creator_user_id
User Model public function followingAlbum()
{
return $this->belongsToMany('album','follow_album');
}
$user = user::find(1)->first();
$followingAlbum = $user->followingAlbum;
これで、この人がフォローしているすべてのアルバムができました。問題は、コレクションにalbum_creator_user_idのみが含まれていることです。所有者のuser_nameを取得するには、コレクションをuserテーブルにリンクする必要があります。それ、どうやったら出来るの?
まず、あなたのコードは実際に機能するのだろうか。中間テーブルのキーは共通の規則に従わないため、パラメーターとしてリレーションに渡す必要があります。
public function followingAlbums()
{
return $this->belongsToMany('Album','follow_album', 'follower_user_id', 'album_id');
}
モデルの名前が、の場合、。Album
という名前のテーブルが検索されることを忘れないでくださいalbums
。テーブルに名前が付けられている場合album
は、Album
モデルにそのプロパティを設定する必要があります。
class Album extends Eloquent {
protected $table = "album";
//...
次に、を->first()
使用したことがある場合は呼び出す必要はありません。これ->find(1)
は、findが常に1つの結果のみを返すためです。
アルバムを作成したユーザーが必要な場合は、その関係をアルバムモデルにも追加する必要があります。
class Album extends Eloquent {
public class creator() {
return $this->belongsTo('User', 'album_creator_user_id');
}
そうすれば、アルバムを介してアルバムの作成者にアクセスできます。上からのあなたの場合、あなたはあなたがしたようにユーザーがフォローしているすべてのアルバムを手に入れることができます
$user = User::find(1);
$followingAlbums = $user->followingAlbums;
複数形を参照してください-ユーザーがフォローしているアルバムが多数ある可能性があります。次の例では、最初のアルバムとそのアルバムの作成者のみを取得します。
$user = User::find(1); //retrieve User with id == 1
$followingAlbum = $user->followingAlbums()->first(); //get the first album he follows
$creator = $followingAlbum->creator; //the user who created the album
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加