【发布时间】:2021-01-21 14:21:36
【问题描述】:
这里我从 3 个模型横幅、横幅类型及其位置获取数据(横幅类型模型没有问题,所以我跳过它)[管理模板是从 quickadminpanel 生成的]
我的数据结构看起来像
横幅
Schema::create('banners', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('banner_name')->unique();
$table->string('banner_header');
$table->string('banner_caption')->nullable();
$table->string('banner_btn_txt');
$table->string('banner_btn_link');
$table->string('banner_btn_color');
$table->timestamps();
$table->softDeletes();
});
2021_01_15_000003_create_positions_table.php
Schema::create('positions', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('position');
$table->timestamps();
});
2021_01_15_000019_add_relationship_fields_to_positions_table.php
Schema::table('positions', function (Blueprint $table) {
$table->unsignedBigInteger('banner_id')->nullable();
$table->foreign('banner_id', 'banner_fk_2983258')->references('id')->on('banners');
});
$banner = Banner::get();
$banner_types = BannerType::get();
$positions = Position::with(['banner'])->orderBy("position")->get();
$banner_array = array();
$banner_no_position = array();
foreach ($banner as $banner){
if(Position::where('banner_id',$banner->id)->count() != 0){
$banner_array = array($banner);
}else{
// print_r($banner);
$banner_no_position = array($banner);
}
}
我要做的是通过创建 2 个不同的数组来分离已定位和未定位的横幅
一个叫$banner_array 工作顺利,但另一个$banner_no_position 只是显示最后一个对象并丢弃其他对象
例如,我创建了 4 个横幅,我只定位了 2 个,然后我在 $banner_array 中得到 2 个对象,在 $banner_no_position 数组中只有 1 个对象,但它应该有 2 个或更多数组,因为我没有放置 2 个横幅
我的刀片看起来像https://pastebin.com/hwAqjZ7S,我的完整控制器看起来像https://pastebin.com/LvvLPSNP,有点乱,但我稍后会美化一些功能 我在控制器中使用的功能是 index 和 newPosition 来读取和保存数据
横幅模型看起来像https://pastebin.com/75nCdBvh 和位置模型看起来像https://pastebin.com/vr7GPd8A
【问题讨论】:
-
如果您有从 Banner 到 Position 的关系,那么您可以使用
has和doesntHave将它们分开,或者您可以使用withCount然后在此基础上借助partition收集方法 -
它的关系是从位置到横幅,即return $this->belongsTo(Banner::class, 'banner_id');
标签: php arrays laravel eloquent