Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

unable to get categories value from table property using foreign key

I want to get the detail property per id from clicking the property list, I have got the property value but can’t retrieve the category values ​​using the foreign key.

This is my test.jsx component:

import React, { useState, useEffect } from 'react';
import { axiosInstance } from '../config/config.js';

function PropertyList() {
  const [properties, setProperties] = useState([]);

  const fetchPro = async () => {
    await axiosInstance.get('/propertys').then((res) => {
      // console.log(res.data.result);
      const datas = res.data.result;

      setProperties(datas);
      console.log(datas);
    });
  };

  useEffect(() => {
    fetchPro();
  }, []);

  return (
    <div>
      <h1>Property List</h1>
      <ul>
        {properties.map((property) => (
          <div className="bg-danger">
            <li key={property.id}>
              <a href={`/propertydetaillist/${property.id}`}>{property.name}</a>
            </li>
          </div>
        ))}
      </ul>
    </div>
  );
}

export default PropertyList;

This is my testdetail.jsx component:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

import React, { useState, useEffect } from 'react';
import { axiosInstance } from '../config/config.js';
import { useParams, withRouter } from 'react-router-dom';

function PropertyDetails(props) {
  const [property, setProperty] = useState({});

  const { id } = useParams();
  const fetchProDetail = async () => {
    await axiosInstance.get(`/propertys/detail/${id}`).then((res) => {
      // console.log(res.data.result);
      const datas = res.data.result;

      setProperty(datas);
      console.log(datas);
    });
  };

  useEffect(() => {
    fetchProDetail();
    console.log(property);
  }, [id]);

  return (
    <div>
      {property ? (
        <div>
          <h1>{property.category.id}</h1>
          <h1>{property.name}</h1>
          <p>{property.description}</p>
          <p>Price: {property.propertyImage}</p>
        </div>
      ) : (
        <p>Loading...</p>
      )}
    </div>
  );
}

export default PropertyDetails;

This is the problem when I click one of the property list
enter image description here

I want to get the categories value by using foreign key in properties table.

>Solution :

property is initially an object:

const [property, setProperty] = useState({});

The code only checks that property exists, but not that property.category exists prior to accessing an id property.

<div>
  {property ? (
    <div>
      <h1>{property.category.id}</h1> // error when property.category undefined
      <h1>{property.name}</h1>
      <p>{property.description}</p>
      <p>Price: {property.propertyImage}</p>
    </div>
  ) : (
    <p>Loading...</p>
  )}
</div>

Just place a null-check on the category property. Provide a fallback value if you like. {} is a defined, truthy object, so if you are also wanting to render the loading UI while the property data is fetched then I suggest also starting with a falsey property value.

Example:

const [property, setProperty] = useState(null);

...

<div>
  {property ? (
    <div>
      <h1>{property.category?.id ?? "No Category Id"}</h1>
      <h1>{property.name}</h1>
      <p>{property.description}</p>
      <p>Price: {property.propertyImage}</p>
    </div>
  ) : (
    <p>Loading...</p>
  )}
</div>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading