Laravel 具有多对多关系的多选下拉列表
在我的laravel项目中,我创建了三个表,分别为employee、Team和employee_Team。employee_teams表中存在多对多关系,外键为employee_id和team_id 员工团队表数据库结构 id |员工id |团队id 在员工表单中有一个多选下拉列表,可帮助为特定员工分配多个团队Laravel 具有多对多关系的多选下拉列表,laravel,relationship,multi-select,Laravel,Relationship,Multi Select,在我的laravel项目中,我创建了三个表,分别为employee、Team和employee_Team。employee_teams表中存在多对多关系,外键为employee_id和team_id 员工团队表数据库结构 id |员工id |团队id 在员工表单中有一个多选下拉列表,可帮助为特定员工分配多个团队 <select name="namedropdown[]" id="namedropdown" class="selectpicker" multiple data-live-se
<select name="namedropdown[]" id="namedropdown" class="selectpicker" multiple data-live-search="true">
<option value="" disabled selected>Nothing selected</option>
@foreach ($tdropdown as $key => $tdrop)
<option value="{{$key}}">{{$tdrop}}</option>
@endforeach
</select>
这是团队模型
class team extends Model
{
public function employees()
{
return $this->belongsToMany(employee::class, 'employee_teams');
}
}
下面是employee_团队表迁移
class CreateEmployeeTeamsTable extends Migration
{
public function up()
{
Schema::create('employee_teams', function (Blueprint $table) {
$table->increments('id');
$table->integer('employee_id')->unsigned();
$table->integer('team_id')->unsigned();
$table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
$table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');
$table->timestamps();
});
}
下面是employee controller中的存储函数
use App\employee;
use App\team;
use App\employee_team;
// codes
$employee = new employee();
$employee->namedropdown = implode(',', $request->input('namedropdown')); //Already save multi-select dropdown ids to the database
$employee->save();
$employee_team = new employee_team();
$employee->teams()->attach($employee->namedropdown);
return redirect()->route('employee.index')->with('success','Data Added');
}
错误以SQLSTATE[01000]的形式出现:警告:第1行“team_id”列的1265数据被截断
请帮助我将employee_id和team_id保存到employee_teams表中。非常感谢。测试的工作样本: 迁移:2020\u 06\u 16\u 000000\u创建\u员工\u table.php 迁移:2020\u 06\u 16\u 000000\u创建\u团队\u table.php 迁移:2020\u 06\u 16\u 000000\u创建\u员工\u团队\u table.php 模型:Employee.php 模型:Team.php Routes:Routes/web.php: 控制器:EmployeeController.php 刀片:选择_team.Blade.php
我认为这是一个很好的例子,可以给你一个想法。你的模型看起来不错。你能分享你的迁移吗?我认为有一个db问题。您不需要$employee\u team=new employee\u team行好的,我添加了employee\u team\u表迁移。好的,我将删除它。帮助我将employee_id和team_id保存到employee_teams表中。您可以检查上面的答案并重新生成代码。
use App\employee;
use App\team;
use App\employee_team;
// codes
$employee = new employee();
$employee->namedropdown = implode(',', $request->input('namedropdown')); //Already save multi-select dropdown ids to the database
$employee->save();
$employee_team = new employee_team();
$employee->teams()->attach($employee->namedropdown);
return redirect()->route('employee.index')->with('success','Data Added');
}
class CreateEmployeesTable extends Migration
{
public function up()
{
Schema::create('employees', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('employees');
}
}
class CreateTeamsTable extends Migration
{
public function up()
{
Schema::create('teams', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('teams');
}
}
class CreateEmployeeTeamTable extends Migration
{
public function up()
{
Schema::create('employee_team', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('employee_id')->nullable();
$table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
$table->unsignedBigInteger('team_id')->nullable();
$table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('employee_team');
}
}
class Employee extends Model
{
public function teams()
{
return $this->belongsToMany('App\Team');
}
}
class Team extends Model
{
public function employees()
{
return $this->belongsToMany('App\Employee');
}
}
Route::get('/select_team/{id?}', 'EmployeeController@select_team')->name('employee.select_team');
Route::post('/save_teams/{id?}', 'EmployeeController@save_teams')->name('employee.save_teams');
use Illuminate\Http\Request;
use App\Team;
use App\Employee;
class EmployeeController extends Controller
{
public function select_team($employee_id){
return view('select_team', ['tdropdown'=>Team::all(), 'employee'=>Employee::find($employee_id)]);
}
public function save_teams(Request $request, $employee_id){
$employee = Employee::find($employee_id);
foreach ($request->namedropdown as $team_id){
$employee->teams()->attach($team_id);
}
return redirect()->route('employee.index')->with('success','Data Added');
}
}
<!DOCTYPE html>
<form action="/save_teams/{{$employee->id}}" method="post">
@csrf
<select name="namedropdown[]" id="namedropdown" class="selectpicker" multiple data-live-search="true">
<option value="" disabled selected>Nothing selected</option>
@foreach ($tdropdown as $tdrop)
<option value="{{$tdrop->id}}">{{$tdrop->name}}</option>
@endforeach
</select>
<button>Submit</button>
</form>
</html>