如何解决无法将新闻项附加到数据透视表中的用户
的后续帖子我正在尝试通过数据透视表将新闻项附加到用户,以便在他们登录后向每个用户显示新闻项。这种想法是,当用户看到某项新闻时,他们可以选中一个框来分离该项目,不再看到它。
我的新闻项似乎正在保存,但是没有任何数据存储在数据透视表中以将它们与用户相关联。理想情况下,保存新闻项后,应将其附加到所有用户。
迁移
create_news_table
class CreateNewsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('news',function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('body');
$table->boolean('sticky');
$table->boolean('draft');
$table->timestamps();
});
}
create_news_user_pivot_table
class CreateNewsUserPivotTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('news_user',function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('news_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')
->onDelete('cascade');
$table->foreign('news_id')->references('id')->on('news')
->onDelete('cascade');
$table->timestamps();
});
}
模型
News.php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\News;
class News extends Model
{
protected $table = 'news';
protected $fillable = ['title','body','sticky','draft',];
public function users()
{
return $this->belongsToMany('App\News')->withPivot('user_id','news_id');
}
}
User.php
class User extends Authenticatable {
use Notifiable;
use SoftDeletes;
//protected $table = "users";
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name','email','password','profilePic','role','verify','first_time_login','changedPasswordDate','needToChangePassword','userRoles'
];
protected $dates = ['deleted_at'];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password','remember_token',];
public function news() {
return $this->belongsToMany('App\News')->withPivot('user_id','news_id');
}
}
NewsUser.php (甚至不确定我是否需要数据透视表模型)
namespace App;
use Illuminate\Database\Eloquent\Model;
class NewsUser extends Model {
protected $table = 'news_user';
protected $fillable = ["user_id","news_id"];
}
控制器中的相关功能
public function saveNews(Request $request) {
$user = Auth::user();
$news = new News;
$news->title = $request->title;
$news->body = $request->body;
$news->sticky = $request->sticky;
$news->draft = $request->draft;
$news->save();
$user->news()->attach($news->id);
}
我意识到最后一个功能只是尝试将新闻发布添加到当前用户,但是如果我解决了这个问题,那么以后我可以弄清楚如何将新闻项附加到所有用户。我猜是这样的:
$users = \App\User::all()
foreach $users as $user {
$user->news()->attach($news->id);
}
解决方法
我在这里return $this->belongsToMany('App\News')->withPivot('user_id','news_id');
在用户模型中尝试使用return $this->belongsToMany('App\News','news_user','user_id','news_id');
,在新闻模型中尝试进行相反的操作,因为将显示belongsToMany()
外键,withPivot()
添加了额外的属性,但是您使用了它的外键,因为它是额外的属性
在同一位置查看所有代码后,发现了几个问题。
News.php
public function users()
应该是
public function user()
并且它还返回错误,“ App \ News”应为“ App \ User”
return $this->belongsToMany('App\News')->withPivot('user_id','news_id');
应该是
return $this->belongsToMany('App\User','news_id');
然后在我的控制器中,将新闻项保存后将其附加到所有用户
foreach ($users as $user) {
$news->user()->attach($user->id);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。