我正在学习长丝,但我被关系经理困住了:

我有两张桌子: 有两个冒号:ID和NOM "USERS",有5个冒号:ID、姓名、邮箱、密码、Eablissement_id

我试着设置我的关系经理如何在文档中写,但我没有成功.

我的代码是:

模型建立

class etablissements extends Model
{
    use HasFactory;

    protected $table = 'etablissements';

    protected $fillable = [
        'nom',
    ];

    public function users(){
        return $this->hasMany(User::class, 'etablissement_id');
    }
}

模型用户:

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
        'password' => 'hashed',
    ];

    public function etablissement(){
        return $this->belongsTo(Etablissement::class);
    }
}

UsersRelationManager.php:

class UsersRelationManager extends RelationManager
{
    protected static string $relationship = 'users';

    public function form(Form $form): Form
    {
        return $form
            ->schema([
                Select::make('author_id')
                    ->label('Author')
                    ->options(User::all()->pluck('name', 'id'))
                    ->searchable()
            ]);
    }

    public function table(Table $table): Table
    {
        return $table
            ->recordTitleAttribute('name')
            ->columns([
                Tables\Columns\TextColumn::make('name'),
            ])
            ->filters([
                //
            ])
            ->headerActions([
                Tables\Actions\CreateAction::make(),
            ])
            ->actions([
                Tables\Actions\EditAction::make(),
                Tables\Actions\DeleteAction::make(),
            ])
            ->bulkActions([
                Tables\Actions\BulkActionGroup::make([
                    Tables\Actions\DeleteBulkAction::make(),
                ]),
            ])
            ->emptyStateActions([
                Tables\Actions\CreateAction::make(),
            ]);
    }
}

问题是,当我创建一个新的机构时,我必须 Select 一个(或多个)将连接到该机构的用户.一个用户只能链接到1个机构. 但是,当我将我的用户连接到机构时,该脚本将创建一个新用户,而不是 Select 一个现有用户.

我放了一些推荐信: edditing page for establishment

it offers me the users

But when i click on "create" the script create a new user instead of modify the etablissement_id of my user that i choose

为了获得信息,我与以下人员一起工作:

  • 就第十条第(1)款而言
  • PHP 8.1
  • 灯丝v3

我试着阅读文档,查看其他代码,但一无所获

推荐答案

您必须在标题操作中使用关联操作.

这是你想要的:

class UsersRelationManager extends RelationManager
{
    protected static string $relationship = 'users';

    // we need to define the inverse relationship name otherwise it will look for plural
    protected static ?string $inverseRelationship = 'etablissement';

    // nothing changed in the below method
    public function form(Form $form): Form
    {
        return $form
            ->schema([
                Forms\Components\Select::make('name')
                ->searchable(['name'])
            ]);
    }

    public function form(Form $form): Form
    {
        return $form
            ->schema([
                Select::make('author_id')
                    ->label('Author')
                    ->options(User::all()->pluck('name', 'id'))
                    ->searchable()
            ]);
    }

    public function table(Table $table): Table
    {
        return $table
            ->recordTitleAttribute('name')
            ->columns([
                Tables\Columns\TextColumn::make('name'),
            ])
            ->filters([
                //
            ])
            ->headerActions([
                // ...
                // It opens a dialog to select the related model
                Tables\Actions\AssociateAction::make(),
            ])
            ->actions([
                // ...
                Tables\Actions\DissociateAction::make(),
            ])
            ->bulkActions([
                Tables\Actions\BulkActionGroup::make([
                    // ...
                    Tables\Actions\DissociateBulkAction::make(),
                ]),
            ])
            ->emptyStateActions([
                Tables\Actions\CreateAction::make(),
            ]);
    }
}

现在,Create按钮被移除,您可以看到Attach按钮,您可以在其中搜索和查找相关模型.

here您可以阅读有关关联记录的更多信息.

此外,您还需要指定反向关系名称.否则,它将在用户模型中查找etablissements而不是etablissement.

Php相关问答推荐

PHP -使用preg_match在字符串中进行匹配

WooCommerce在购买后多次重定向

laravel中获取的数据会自动更改时间戳值

Symfony 6.2 IsGraned具有多个角色

如何按类别过滤自定义帖子类型

如何在WordPress REST API中判断应用程序密码

如果WooCommerce购物车在 checkout 时被清空,请重定向至store 页面

在WooCommerce中以编程方式添加特定产品后,将价格设置为零

execute_query 和prepare+execute 有什么区别?

当未 Select 任何变体时,在 WooCommerce 可变产品上显示自定义文本

从 XAMPP 运行 shell 脚本时,意外标记(附近出现语法错误

带有分类术语数组的 WordPress Elementor 自定义查询 - 如何要求所有术语都在返回的帖子中

PHP Symfony 在测试.env文件中将接口自动装配作为构造函数参数,但使用接口的特定类

PHP:如何将多列sql查询结果转换成数组

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

Xdebug 不会在断点处停止

为 WordPress 页面创建新功能

正则表达式请帮我从内容中找到这个词

Eloquent 的模型更新了它应该 laravel php 的更多行

使用 PHP ImageMagick 库将 pdf 文件的前 n 页转换为单个 png 图像文件