答案有评论,评论有投票 答案有选票。
votes table:
id user_id vote votable_id votable_type
1 1 5 1 Comment
2 1 6 1 Post
...
发布模型:
public function comments()
{
return $this->hasMany('App\Comment','post_id','id');
}
public function votes()
{
return $this->morphMany('App\Vote', 'votable');
}
评论模型:
public function votes()
{
return $this->morphMany('App\Vote', 'votable');
}
public function post()
{
return $this->belongsTo('App\Post','post_id','id');
}
投票模型:
public function votable()
{
return $this->morphTo();
}
我收到了所有帖子及其评论,但未获得帖子和评论的投票。
$posts=Post::all();
foreach($posts as $post)
{
echo "<pre>"; print_r($post->post);
foreach($post->comments as $comment)
{
echo "<pre>"; print_r($comment->comment_body);
foreach($comment->votes as $vote)
{
echo "<pre>"; print_r($vote->vote);
}
}
foreach($post->votes as $vote)
{
echo "<pre>"; print_r($vote->vote);
}
}
print_r($post->votes);
和print_r($comment->votes);
与投票没有任何关系。
答案 0 :(得分:2)
请在{{1}中使用 App \ Comment 和 App \ Post 代替评论或发布列。
Laravel 4.2过去只保留模型的名称,但Laravel 5.2现在将它们与名称空间一起存储。
如果有任何疑问,请告诉我们。)
- 编辑
正如@jaysingkar在评论中所说的那样,我正在为这个问题添加为morphMap做的代码。
使用以下命令
创建您自己的服务提供商apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion " 22.0.1"
defaultConfig {
applicationId "com.app.xxxx"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
} }
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(path: ':vitamio')
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.android.support:design:22.2.1'
compile 'com.android.support:support-v4:22.2.1'
}
然后,在命名空间
之后创建putvotable
然后将其添加到php artisan make:provider RelationServiceProvider
方法
use Illuminate\Database\Eloquent\Relations\Relation;
希望它有所帮助! :)