【发布时间】:2015-10-06 17:40:53
【问题描述】:
我正在尝试使用 Eloquent 为 Laravel 中的帖子构建一个简单的新闻提要。
我基本上想检索所有帖子...
- 我在哪里作者
- 我关注的人是作者(可关注)
- 我关注的人评论过的地方
- 具有相同 field_id 的人是作者
- 具有相同 school_id 的人是作者
在一个查询中。
由于我从未深入处理过联接/组合 SQL 查询,因此非常感谢您提供任何帮助!
我的桌子
users表
+----+
| id |
+----+
posts表
+----+-----------+-------------+
| id | author_id | author_type |
|----|-----------|-------------|
| | users.id | 'App\User' |
+----+-----------+-------------+
comments表
+----+----------------+------------------+-----------+-------------+
| id | commentable_id | commentable_type | author_id | author_type |
|----|----------------|------------------|-----------|-------------|
| | posts.id | 'App\Post' | users.id | 'App\User' |
+----+----------------+------------------+-----------+-------------+
schoolables表
+---------+-----------+----------+
| user_id | school_id | field_id |
+---------+-----------+----------+
followables表
+-------------+---------------+---------------+-----------------+
| follower_id | follower_type | followable_id | followable_type |
|-------------|---------------|---------------|-----------------|
| users.id | 'App\User' | users.id | 'App\User' |
+-------------+---------------+---------------+-----------------+
我的模型
class Post extends Model
{
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
*/
public function author()
{
return $this->morphTo();
}
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}
class Comment extends Model
{
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
*/
public function author()
{
return $this->morphTo();
}
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
*/
public function commentable()
{
return $this->morphTo();
}
}
class User extends Model
{
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function posts()
{
return $this->morphMany(Post::class, 'author')->orderBy('created_at', 'desc');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function comments()
{
return $this->morphMany(Comment::class, 'author')->orderBy('created_at', 'desc');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function schoolables()
{
return $this->hasMany(Schoolable::class);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function following()
{
return $this->morphMany(Followable::class, 'follower');
}
}
【问题讨论】:
-
那么您的尝试代码在哪里?或者你只是希望有人会为你写完整的东西?
-
@pitchinnate 我不抱任何希望,我只是想学习如何构建此类查询或为此收集更多资源。
标签: php mysql laravel eloquent laravel-5.1