无法获取街道列表以创建卡片

时间:2021-03-19 18:48:06

标签: php mysql laravel eloquent

 public function create()
    {
       $streets = street::get();
       return view('dashboard.house.created');
    }

 public function store(Request $request)
    {
$this->validate($request, [
            'home_number' => 'required',
            'passport' => 'required',
            'option_1' => 'required',
            'street_id' => 'required',
            'option_2' => 'required',
            'option_3' => 'required',
            'garage' => 'required',
            'apartments' => 'required',
            's_full' => 'required',
            's_life' => 'required',
            's_nlife' => 'required',
            'status' => 'required',
            'year_create' => 'required',
        ]);

        $homes = Houses::query()->create([
                'home_number' => $request->get('home_number'),
                'passport' => $request->get('passport'),
                'option_1' => $request->get('option_1'),
                'option_2' => $request->get('option_2'),
                'street_id' => $request->get('street_id'),
                'option_3' => $request->get('option_3'),
                'garage' => $request->get('garage'),
                'apartments' => $request->get('apartments'),
                's_full' => $request->get('s_full'),
                's_life' => $request->get('s_life'),
                's_nlife' => $request->get('s_nlife'),
                'status' => $request->get('status'),
                'year_create' => $request->get('year_create'),
            ]
        );
        if ($request->hasFile('image') && $request->file('image')->isValid()) {
            $homes->addMediaFromRequest('image')->toMediaCollection('images');
        }

我在家里创建时无法填写卡片。街道列表出现,但当您选择一条街道,并进一步填写所有字段时,页面会刷新,无需将数据输入数据库。代码哪里有错误,请告诉我!

更新: 现在我无法访问带有房屋列表的管理面板页面,写道

ErrorException
Attempt to read property "name" on null (View: D:\laravel-tested\project1\resources\views\Dashboard\house\main.blade.php)

错误在这一行突出显示(这是您获得街道和门牌号的地方)。

<td class="w-2/3 py-5">{{$home->street->name}}, {{$home->home_number}}</td>

created.blade.php

 <div>
                        <label for="street">Street</label>
                        <select name="street_id" class="w-full">
                            <option selected>Choose street</option>
                            @foreach($streets as $street)
                                <option value="{{$street->id}}">{{$street->name}}</option>
                            @endforeach
                        </select>
                    </div>

1 个答案:

答案 0 :(得分:2)

您可以在商店方法中验证街道,我假设数据库中的表名为 streets 并且有一个主键 id

$this->validate($request, [
            'home_number' => 'required',
            //...
            'street_id" => 'exists:streets,id',
            //...
            'year_create' => 'required',
        ]);

可能 street_id 不存在于您的房屋模型的属性 $fillable 中,并且未设置为 '*'。 改变你保存模型的方式

$homes = new Houses();
$home->home_number = $request->get('home_number');
$home->passport = $request->get('passport');
$home->option_1 = $request->get('option_1');
$home->option_2 = $request->get('option_2');
$home->street_id = $request->get('street_id');
$home->option_3 = $request->get('option_3');
$home->garage = $request->get('garage');
$home->apartments = $request->get('apartments');
$home->s_full = $request->get('s_full');
$home->s_life = $request->get('s_life');
$home->s_nlife = $request->get('s_nlife');
$home->status = $request->get('status');
$home->year_create = $request->get('year_create');
$home->save();

if ($request->hasFile('image') && $request->file('image')->isValid()) {
    $homes->addMediaFromRequest('image')->toMediaCollection('images'); 
}

或设置在 Houses 类中

protected $fillable = ['*'];