Russel Monzur
Russel Monzur

Reputation: 153

How to solve Array to string conversion when save data into database in laravel 6

When I am going to save data to database using save($data) . Then there show a error ErrorException Array to string conversion.

Here is controller :

public function create(Request $request){
        $company = new Company();
        $data = [
        'name' => $request['name'] ,
        'address' => $request['address'] ,
        'city' => $request['city'] ,
        'state' => $request['state'] ,
        'zip' => $request['zip'] ,
        'country' => $request['country'] ,
        'email' => $request['email'] ,
        'logo' => $request['logo']
        ];

        $file = $request->file('logo');
        if($request->hasFile('logo')){
            $destinationPath = 'upload';
            $file->move($destinationPath,$file->getClientOriginalName());
        }

        //dd($data);

        $company->save($data);

        return true ;

    }

Upvotes: 1

Views: 1787

Answers (3)

user2711639
user2711639

Reputation:

Since you instantiating the model. you could do like this instead of passing an array.

$company = new Company();
$company->name = $request['name'];
$company->address = $request['address'];
$company->city = $request['city'];
$company->state = $request['state'];
$company->zip = $request['zip'];
$company->country = $request['country'];
$company->email = $request['email'];
$company->save();

if $request['name'] like variables doesn't work with associative array then i would personally change it to more like object e.g $request->name and so on with every other variables.

Upvotes: 0

Md Al imrun Khandakar
Md Al imrun Khandakar

Reputation: 159

try this ..

public function create(Request $request){

    $data = [
    'name' => $request['name'] ,
    'address' => $request['address'] ,
    'city' => $request['city'] ,
    'state' => $request['state'] ,
    'zip' => $request['zip'] ,
    'country' => $request['country'] ,
    'email' => $request['email'] ,
    'logo' => $request['logo']
    ];

    $file = $request->file('logo');
    if($request->hasFile('logo')){
        $destinationPath = 'upload';
        $file->move($destinationPath,$file->getClientOriginalName());
    }

    //dd($data);

    DB::table('companies')->insert($data); //dont forget to import DB namespace.  

    return true ;

}

the table name is companies so I used that. Model( company )

Upvotes: 1

Vladimir Gonchar
Vladimir Gonchar

Reputation: 203

Add the attribute protected $fillable = [ 'column_a', 'column_b', .. ]; to your model. Then you can use the mass assignment like this.

Too much extra code. You should use modern variants.

public function create(Request $request){
    $file = $request->file('logo');
    if($request->hasFile('logo')){
        $file->move('upload', $file->getClientOriginalName());
    }

    Company::create([
        'name' => $request->name,
        'address' => $request->address,
        'city' => $request->city,
        'state' => $request->state,
        'zip' => $request->zip,
        'country' => $request->country,
        'email' => $request->email,
        'logo' => $request->logo
    ]);

    //You can also use this if "$fillable" array in model is filled:
    //Company::create($request->all());

    return true;
}

Upvotes: 1

Related Questions