0
votes

Essayer d'obtenir la propriété de Laravel non-objet avec l'installation de php5.6

toute aide est appréciée:

** la base de données a créé les tables et fonctionne correctement: **

mais le navigateur renvoie une erreur (Essayer d'obtenir la propriété de non-objet (View:)

Le fichier du contrôleur est:

@foreach ( (array)$doc_data as $data )
          {{  $data->id }}
@endforeach

Le fichier du modèle est:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class DocTracking extends Model
{
    protected $table = 'doctracking';
}
?>

le fichier de vue est:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Models\DocTracking;
use App\Models\User;
use Exception;
use Auth;
use PDF;
use QrCode;
use Carbon;
use Validator;
use Illuminate\Support\Facades\input;


class DocTrackingController extends Controller
{
    public function __construct() {
        $this->middleware('auth', ['only', 'getDashboard']);
    }
  public function index(Request $request,$id=null)
    {
        if(!Auth::check()){
            return "Please Login";
        }
        if($id != null){
            $userid= $id;
        }
        else {
            $user_id= Auth::user()->id;
            $selluser = User::find($user_id);
        }

       $data = DocTracking::all();
        $data = array(
    'name'=> $request->name,
            'start_date'  =>Carbon::parse( $request->start_date),
            'end_date' =>Carbon::parse( $request->end_date),
            'amount' => $request->amount,
            'merchant_id'=> $user_id
  );
/*
  $doc_data  =  DocTracking::all();
        $doc_data = response()->json($data);
        $doc_data = json_encode($data);

       return view('doctracking.doctracking' ,['selluser'=>$selluser, 'doc_data' => $doc_data]);  // return view('doctracking.doctracking',compact('doctracking') );


    }
  public function add_doc(Request $request)
    {
        $validation = Validator::make($request->all(),[
            'name'=> 'required',
            'start_date'=> 'required',
            'end_date'=> 'required',
            'amount'=> 'required',
            'select_file'=> 'required |image |mimes:jpeg,png,jpg,gif,svg |max:2048',
        ]);


        $this->validate( $request, [
            'name'=> 'required',
            'start_date'=> 'required',
            'end_date'=> 'required',
            'amount'=> 'required',
            'select_file'=> 'required |image |mimes:jpeg,png,jpg,gif,svg |max:2048',
        ]);

         if ( $validation->passes())
         {

            $user_id= Auth::user()->id;

             $image = time().'.'.$request->file('select_file')->getClientOrignalExtension();
             $request->file('select_file')->move(public_path('images'), $image);

            $file=$request->file('select_file');
            $uploaded_file_path='';
            if($file!=null) {
                $destinationPath = 'images/docktracking/';
                $uploaded=$file->move($destinationPath,$file->getClientOriginalName());
                $image= $uploaded->getPathName();
                $img_name= $file->getClientOriginalName();
            }
            $data = array(
                'name'=> $request->name,
                'start_date'  =>Carbon::parse( $request->start_date),
                'end_date' =>Carbon::parse( $request->end_date),
                'amount' => $request->amount,
                'merchant_id'=> $user_id,
                'image' =>$img_name

            );

            $doc_data= DocTracking::create($data);
            return response()->json($doc_data);

    }
}
}

?>

Je pense que si {{$ data-> id}} récupère les données, tout fonctionnera bien


3 commentaires

Essayez $ data ['id']


maintenant cette erreur Décalage de chaîne illégal 'id'


Supprimez ces deux lignes $ doc_data = response () -> json ($ data); $ doc_data = json_encode ($ données);


4 Réponses :


0
votes

Vous devez ajouter la clé 'id' à votre tableau de données (bien sûr, renvoyez le tableau sous la forme 'doc_data' comme vous le faites actuellement):

@foreach($doc_data as $data)
      {{ $data['id'] }}
@endforeach

Accédez-y comme ceci:

$data = array(
    'id' => $id
    'name' => $request->name,
    'start_date' => Carbon::parse( $request->start_date),
    'end_date' => Carbon::parse( $request->end_date),
    'amount' => $request->amount,
    'merchant_id' => $user_id
);

return view('doctracking.doctracking', [
     'selluser' => $selluser, 
     'doc_data' => $data
]);


5 commentaires

Assurez-vous que $ id contient une valeur.


même problème Décalage de chaîne illégal 'id'


voulez-vous dire comme $ data = DocTracking :: all ();


Je ne sais pas, cela dépend de ce que vous voulez montrer. Dans votre question, vous attribuez deux fois des valeurs à $ data.


je ne comprends pas



0
votes

Vous devez renvoyer une vue dans votre fonction d'index avec le paramètre que vous voulez passer.

@foreach($doc_data as $data)
  {{ $data->id }}
@endforeach

et en vue

$doc_data = DocTracking::all();
return view('doctracking.doctracking',compact('doc_data') );


2 commentaires

maintenant les deux fichiers se parlent mais ont toujours cette erreur Variable non définie: doc_data


le nom de la variable doit être le même sur 1: la déclaration de la variable, 2: sur la fonction compacte à l'intérieur de la vue de retour, et 3: dans votre vue, vérifiez que vous avez le même nom à ces 3 endroits



0
votes

Tout d'abord, assurez-vous que depuis votre Controller, vous renvoyez un objet $ doc_data car dans votre code actuel, l'instruction return est commentée, donc je ne sais pas ce que c'est.

p> Deuxièmement, dans votre vue, vous avez du code:

@foreach ( (array)$doc_data as $data )
          {{  $data['id'] }}
@endforeach

En gros, vous tapez vous-même $ doc_data dans un tableau, puis essayez de accédez-y en tant qu'objet :) bien sûr, vous obtenez une erreur Essayer d'obtenir la propriété d'un non-objet .

Soit l'utiliser comme objet:

@foreach ( $doc_data as $data )
          {{  $data->id }}
@endforeach

OU utilisez-le comme tableau:

@foreach ( (array)$doc_data as $data )
          {{  $data->id }}
@endforeach

Vous ne pouvez pas jouer sur les deux tableaux :)


0 commentaires

0
votes

Vous utilisez la variable $ data pour récupérer les données DocTracking ,

De plus, vous écrasez $ data par un tableau qui ne contient pas id

vous pouvez également convertir le résultat en tableau en utilisant la fonction toArray ()

$ data = DocTracking :: get () -> toArray ();


0 commentaires