我正在控制器中创建功能,我想附加用户和他的订单。首先,我在两个模型UNQUOTED
和User
之间建立关系。
这是Orders
模型中的功能:
User
这是public function orders(){
return $this->belongsToMany('App\Orders', 'user_orders', 'user_id', 'order_id');
}
模型中的功能:
Orders
这是新表public function users(){
return $this->belongsToMany('App\User', 'user_orders', 'order_id', 'user_id');
}
,我希望用我之前提到的这种关系附加用户订单:
user_orders
最后,这是我获取带有请求和订单ID的用户名的功能,并尝试将订单附加到给定用户。
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUserOrdersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('user_orders', function (Blueprint $table) {
$table->increments('id');
/*$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->integer('order_id')->unsigned();
$table->foreign('order_id')->references('id')->on('orders');*/
$table->integer('user_id');
$table->integer('order_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('user_orders');
}
}
我还检查了我是否获得了正确的用户名和订单ID,并且代码的前两行工作正常,但是当我尝试附加订单时,我收到此错误:
public function makeOrder(Request $request, $id){
$user = User::where('name', $request['username'])->first();
$findorder = Orders::find($id);
$user->orders()->detach();
$user->orders()->attach(Orders::where('id', $findorder))->first();
return redirect()->back();
}
有什么想法吗?
答案 0 :(得分:1)
您应该获得第一个对象然后获取ID:
$user->orders()->attach(Orders::where('id', $findorder)->first()->id);
您应该将ID传递给attach()
方法,但不能传递给集合或对象。
<强>更新强>
似乎$findorder
是订单ID,所以只需执行此操作:
$user->orders()->attach($findorder);
答案 1 :(得分:0)
问题很简单。即这一行:
$user->orders()->attach(Orders::where('id', $findorder))->first();
,更具体地说:
Orders::where('id', $findorder)
目前,这将返回一个Model
对象,该对象没有(也不应该)实现__toString
方法。
长话短说,在Orders::where('id', $findorder)
添加->first()
之后或者你需要获得的任何内容。
有关附加/分离的详细信息,请参阅here。